学python掉过的坑---NO.1

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上的代码,给点意见。。。小子感激不尽!!

地址:https://github.com/ClownKnight/Hello-HappyWorld/blob/master/6-%E5%87%BD%E6%95%B0%E4%BD%9C%E7%94%A8%E5%9F%9F%E5%92%8C%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0-checkpoint.ipynb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值