Python变量的作用域不由变量所在源代码中的位置决定,python函数对变量的作用

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: