|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.var = ' Hi '  
2.def fun1():  
3.    global var  
4.    var = ' How '  
5.    return fun2(var)  
6.def fun2(var):  
7.    var += 'are you'  
8.    fun3(var)  
9.    return var  
10.def fun3(var):  
11.    var = ' yes '  
12.print(fun1())  
运行结果是: How are you
fun1最终返回的是fun2的运算结果,也就是说在fun2中返回的var == How are you,为什么在fun2中通过var += ‘are you’修改了var,而之后调用fun3没有修改var?三个函数中的var是什么关系?
———————————————————————————————————————
1.def funOut():  
2.    def funIn():  
3.        print('宾果!你成功访问到我啦!')  
4.    return funIn()  
访问funIn() 需要采用funOut(),而在
1.def funOut():  
2.    def funIn():  
3.        print('宾果!你成功访问到我啦!')  
4.    return funIn  
中访问funIn()需要采用funOut()()。代码里面的 return funIn()和return funIn有什么区别?
——————————————————————————————————————————————
1.def funX():  
2.    x = 5  
3.    def funY():  
4.        nonlocal x  
5.        x += 1  
6.        return x  
7.    return funY  
8.a = funX()  
9.print(a())  
10.print(a())  
11.print(a()) 
最后打印的结果是:6
7
8
答案是这么解释的:当a = funX()的时候,只要a变量没有被重新赋值,funX()就没有被释放,也就是说局部变量x就没有被重新初始化。
funX没有被释放是什么意思?是因为x非局部变量,所以每次的x也会依次变化,重新用于下一次的计算?
代码A
1.def outside():  
2.    var = 5  
3.    def inside():  
4.        var = 3  
5.        print(var)  
6.          
7.    inside()  
8.outside()  
代码B
[code]1.def outside():  
2.    var = 5  
3.    def inside():  
4.        print(var)  
5.        var = 3  
6.          
7.    inside()  
8.outside() 
代码B会报错:这里outside()函数里有一个var变量,内嵌函数inside()也有一个同名的变量,Python为了保护变量的作用域,故将outside()的var变量屏蔽起来,因此此时是无法访问到外层的var变量的。
为啥print的时候不能把外层的var=5传进来?Python是发现了print(var)里面的var才屏蔽外层变量var的吗?因为后面才是对var赋值,所以前面print的时候,闭包里面的var没值?
|
|