1 namespace
在python中。只有模块(module)才会重新开辟一个新的作用域,像if/else
,for loop
,while loop
等是不会开辟新的作用域的。也就是说,在上述这几个循环体或控制体中的变量,在外部也就是主作用域中一样可以调用。看下面代码:
1 | for i in range(10): |
运行结果:9
从代码中可以看出,这几个控制体中不存在作用域。
2 global
上一节讲述了作用域,这里就介绍一下global
关键字。先看代码:
1 | num = 100 |
运行结果: 20
如果想要在test()
函数内部调用外部的num
变量,那么就需要使用global
关键字。如下:
1 | num = 100 |
运行结果:200
3 nonlocal
在介绍nonlocal
关键字之前,大家需要先了解一下闭包的概念,闭包在很多的编程语言中都有,在python中也有。
什么是闭包?
闭包就是在一个函数嵌套另一个函数,这两个函数都有其
局部变量
,外部的函数中的变量,在内部函数中是不能被直接
修改的。也就是说,我们可以进行间接修改。那间接修改就需要用到nonlocal
关键字。
先看一段代码:
1 | def outter(): |
运行结果:
inner:300
outter:200
这是没有使用nonlocal
关键字的代码:如果我们使用nonlocal
定义var
的话,那么救结果就不同了:
修改代码:去掉第4行的注释即可
运行结果:
inner:300
outter:300
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment