en,今天学了—–函数作用域和递归函数
来看看,我都掉了哪些坑吧~~~~
Frist one global和nonlocal的坑
代码放上来:
案例二–关于global的一些问题
a1全局变量
a1 = 100
def test():
#使用global后 未报错 but 这个报错让我非常奇怪啊!!a1是全局变量,而在函数内部调用为什么会报错呢?
global a1, a2
a1 += 10
a2 = 65
print(‘test…..’)
print(a1)
未使用global时报错:UnboundLocalError: local variable ‘a1’ referenced before assignment
test()
print(a1)
使用global提升a2后 可以直接打印出来
print(a2)
然后,,,便是思考总结了,,,没思考总结还学个*啊!
关于global报错的思考¶
在网上查找后,我对global报错问题有了一些看法
·首先,毫無疑問global是用于将局部变量提升为全局变量的
·其次,global不仅仅是用于提升,也是用于在局部声明某个变量是全局变量
·电脑是很笨的,而python函数内部,同样的变量名a1却代表不同的变量,一个是全局变量,一个是局部变量,想要让电脑知道这个a1是全局变量就要使用global声明。
该nonlocal了,,代码放上来:
案例三3.0版本
t = 2
f = 2
def fun1():
t = 100
def fun2():
#global t 报错啦啦啦,NameError: name ‘t’ is not defined
global f
nonlocal t
t += 50
f += 1
print(‘t = {0}’.format(t))
print(t)
return fun2()
t未发生改变 why?
fun1()
print(f)
思考总结:
关于案例三的一些思考后的结论¶
·首先,global不适用于多层函数嵌套的变量提升,因为会发生变量名冲突,电脑不知道你指的是全局变量还是上层的局部变量。
·and, 在多层嵌套的函数中,要想使用上一层函数的变量,就需要使用nonlocal
·没有多层嵌套的函数中,nonlocal是无法使用的,我的理解是,没有上层函数,也就无法使用nonlocal,so
·我的理解,nonlocal的定义为:声明在本函数中的变量是上层函数的同名变量。嘛~~~~这就蛮有意思了。
·真不知道python的设计师是咋想到这么个游戏规则的。
嘛~~~~这两个坑,耗了我蛮长时间的。
当然,这里只是一部分代码,有兴趣的前辈可以去看看我GitHub上的代码,给点意见。。。小子感激不尽!!