Python变量的作用域不由变量所在源代码中的位置决定,python函数对变量的作用
LEGB:L:即局部变量,当前存在的命名空间(函数或模块)和函数参数也属于命名空间中的变量。
e:封闭函数,外部嵌套函数的命名空间。
g:全局变量。
b:是嵌入式模块的命名空间,所有模块都位于__builtin__中
变量检索优先级:局部作用域(L)嵌套作用域(E)全局作用域(G)内置作用域(B))。
让我们看一个例子。
1:city=“政府周”
定义类别名称(:)
城市=上海
打印网站
cityname())
打印网站
点击。上海
郑州
说明:因为模块中值为zhengquous的city变量是全局变量,而函数cityname中的city变量是局部变量,所以根据范围搜索顺序,函数中print语句中的city值必须位于cityname函数内部的city中,函数中hungry print语句的city是模块中的全局变量。
2)上面例子中函数的内部赋值如何改变外部作用域city=郑州中同名变量的值
定义类别名称(:)
邱欢市
城市=上海
打印网站
cityname())
打印网站
点击。上海
上海
注意:这里,关键字global用于将函数中的city变量声明为全局变量。这样,全局变量可以在函数范围内改变。
关键字不是本地的。
在python2中,闭包只能读取外部函数的变量,不能重写。为了解决这个问题,python3引入了非本地关键字。通过在闭包中声明非局部变量,解释器现在可以在外部函数中查找变量名。非局部类似于全局。nonlocal关键字允许您在嵌套函数中更改嵌套范围def cityname():
城市=郑州
定义类别名称(:)
非本地名称
城市=上海
Cityname())
是,打印(城市)
cityname())
点击。上海
全局关键字和非本地关键字的区别:
1.功能不同。关键字global修饰一个变量后,表示它是一个全局变量,全局变量改变后也会改变。另一方面,非局部杠杆的自定义变量是上级函数的局部变量,如果上级函数中不存在该局部变量,则在非局部位置会出现错误。
2:范围不同。您可以在任何地方使用global关键字,包括顶级函数和嵌套函数。即使有先前未定义的更改,global也可以被限定并直接使用,但nonlocal关键字只能在嵌套函数中使用,在嵌套函数中定义了相应的局部变量。否则,将会出现错误。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。