Python3中的nonlocal⽤法
我先说⼀下官⽹的nonlocal的⽤法:
⾮局部声明变量指代的已有标识符是最近外⾯函数的已声明变量,但是不包括全局变量。这个是很重要的,因为绑定的默认⾏为是⾸先搜索本地命名空间。nonlocal声明的变量只对局部起作⽤,离开封装函数,那么该变量就⽆效。
⾮局部声明不像全局声明,我们必须在封装函数前⾯事先声明该变量
⾮局部声明不能与局部范围的声明冲突
官⽹的解释虽然很好,但是不好理解,我们直接使⽤代码进⾏理解:
1 count = 1
2
3def a():
4 count = 'a函数⾥⾯' #如果不事先声明,那么函数b中的nonlocal就会报错
5def b():
6 nonlocal count
7print(count)
8 count = 2
9 b()
10print(count)
11
12if__name__ == '__main__':
13 a()
14print(count)
运⾏结果是:
a函数⾥⾯
2
记住我1
该代码就可以很好的解释了,第⼀⾏的count和a()函数中的count是两个变量,⽽a()函数中的count变量只是在该函数内部起作⽤,因为它是⼀个局部变量。
nonlocal只能在封装函数中使⽤,在外部函数先进⾏声明,在内部函数进⾏nonlocal声明,这样在b()函数中的count与a()中的count是同⼀个变量。
nonlocal错误的使⽤⽅法
1.在外部函数进⾏声明
1 count = 1
2
3def a():
4#nonlocal count #这种声明⽅法肯定报错,
5def b():
6 nonlocal count #在a()函数中没有提前声明,所以报错
7print(count)
8 count = 2
9 b()
10print(count)
11
12if__name__ == '__main__':
13 a()
14print(count)
报错代码:
File "G:/学习/扩充学习/Python/程序/PyCharm/test.py", line 5
nonlocal count
^
SyntaxError: no binding for nonlocal 'count' found
2.外部函数中变量声明为global
1 count = 1
2
3def a():
4global count
5 count = 'a函数⾥⾯'
6def b():
7 nonlocal count
8print(count)
9 count = 2
10 b()
11print(count)
12
13if__name__ == '__main__':
14 a()
15print(count)
报错代码:
File "G:/学习/扩充学习/Python/程序/PyCharm/test.py", line 7 nonlocal count
^
SyntaxError: no binding for nonlocal 'count' found
发布评论