Python中中 Global和和Nonlocal的用法详解的用法详解
global关键字用来在函数或其他局部作用域中使用全局变量, nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内
的变量。这篇文章主要介绍了Python中 Global和Nonlocal的用法,需要的朋友可以参考下
nonlocal 和 global 也很容易混淆。简单记录下自己的理解。
解释解释
global
总之一句话,作用域是全局的,就是会修改这个变量对应地址的值。
global 语句是一个声明,它适用于整个当前代码块。 这意味着列出的标识符将被解释为全局变量。 尽管自由变量可能指的是全局变量而不被声明为全
局变量。
global 语句中列出的名称不得用于该全局语句之前的文本代码块中。
global 语句中列出的名称不能定义为形式参数,也不能在 for 循环控制目标、 class 定义、函数定义、 import 语句或变量注释中定义。
当前的实现并不强制执行这些限制,但是程序不应该滥用这种自由,因为未来的实现可能会强制执行这些限制,或者悄悄地改变程序的含义。
程序员注意: global 是指向解析器的指令。 它仅适用于与全局语句同时解析的代码。 特别是,包含在提供给内置 exec() 函数的字符串或代码对象中的
全局语句不会影响包含函数调用的代码块,而且这种字符串中包含的代码不会受包含函数调用的代码中的全局语句的影响。 eval() 和 compile() 函数
也是如此。
一、一、global
1、global关键字用来在函数或其他局部作用域中使用全局变量。但是如果不修改全局变量也可以不使用global关键字。
gcount = 0
def global_test():
gcount+=1
print (gcount)
global_test()
以上代码会报错:第一行定义了全局变量,在内部函数中又对外部函数进行了引用并修改,那么python会认为它是一个局部变量,有因为内部函数没
有对其gcount进行定义和赋值,所以报错。
2、如果局部要对全局变量修改,则在局部声明该全局变量
gcount = 0
def global_test():
global gcount
gcount+=1
print (gcount)
global_test()
以上输出为:1
3、如果局部不声明全局变量,并且不修改全局变量,则可以正常使用
gcount = 0
def global_test():
print (gcount)
global_test()
以上输出为:0
二、二、nonlocal
nonlocal
只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。
nonlocal 语句使列出的标识符引用除 global 变量外最近的封闭范围中的以前绑定的变量。 这很重要,因为绑定的默认行为是首先搜索本地名称空间。
评论10