请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么tourist(2),把2传到了step这个形参中?这个有点不理解

origin = 0
def factory(pos):
def go(step):
nonlocal pos
new_pos = pos + step
pos = new_pos
return new_pos
return go

tourist = factory(origin)
print(tourist(2))
print(tourist(3))
print(tourist(6))

我脑子卡住了,总觉得tourist(2),这个2应该是pos啊,怎么就变成step了呢?
go()这里也没调用嘛
前面讲的函数作用域链的课,以及前面点的“一个实例看闭包”课程中 嵌套的函数都要调用一下的,这里为何不需要调用一下?
这个地方不理解了,麻烦老师、同学帮忙解答一下,非常感谢!

正在回答 回答被采纳积分+3

1回答

7七月 2020-06-28 11:24:32

你把代码格式化一下,这样我看不出来

0 回复 有任何疑惑可以回复我~
  • 提问者 轻杯过海 #1
    origin = 0
    
    def factory(pos):
        def go(step):
            nonlocal pos
            new_pos = pos + step
            pos = new_pos
            return new_pos
        return go
    
    tourist = factory(origin)
    print(tourist(2))
    print(tourist(3))
    print(tourist(6))
    
    按格式重新拷了下代码,不行我再发截图
    回复 有任何疑惑可以回复我~ 2020-06-28 16:21:21
  • 7七月 回复 提问者 轻杯过海 #2
    factory返回的是一个函数 go 对吧。所以tourist实际上就 等于 go这个函数,go是要接收step的,那tourist(step)没有问题
    回复 有任何疑惑可以回复我~ 2020-06-28 23:35:23
  • 这里我也不理解,那第一次赋值tourist=factory(0),这里是不是可以等价为tourist(0)=factory(0),岂不是和tourist(step)有出入
    回复 有任何疑惑可以回复我~ 2020-09-27 23:14:13
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号