秃头的程序员 发表于 2019-2-27 20:27:23

关于return的疑问

例1:
def funX():
        x = 5
        def funY():
                nonlocal x
                x += 1
                return x
        funY()
例2:
def funX():
        x = 5
        def funY():
                nonlocal x
                x += 1
                return x
        return funY()

为什么同样执行funX() ,例1没结果,例2却有结果呢

水瓶座 发表于 2019-2-27 20:56:50

x的走向
例1:funX()→funY→funX→全局
例2:funX()→funY→funX

可以看出,由于例1没有把x return出来,故无结果
而例2返回到全局,至于有没有结果,如果你不用IDLE运行,照样没结果
return只是把数据返回出来
比如说在定义了funX()的基础上加上一句
a = funX()
print(a)
a = funX() 这里x一路返回到这个等号的右边,然后往左边赋值
如果没有print那是不可见的,IDLE可见应该只是为了方便调试。

秃头的程序员 发表于 2019-2-27 21:10:31

水瓶座 发表于 2019-2-27 20:56
x的走向
例1:funX()→funY→funX→全局
例2:funX()→funY→funX


例1不是有return x 吗?

水瓶座 发表于 2019-2-27 21:14:43

秃头的程序员 发表于 2019-2-27 21:10
例1不是有return x 吗?

你return x只是把x return到了funX
你可以把x当成在第二层(因有两个函数)
return一次,退出一层
页: [1]
查看完整版本: 关于return的疑问