视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python如何在非创建全局变量的地方使用全局变量
2020-11-27 14:09:38 责编:小采
文档


在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全局作用域(Global)、内置作用域(builtins模块)的顺序来进行的,即所谓的LEGB规则。 即python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量。

然而当在一个函数内部为一个变量赋值时,并不是按照上面所说LEGB规则来首先找到变量,之后为该变量赋值。在Python中,在函数中为一个变量赋值时,有下面这样一条规则:“当在函数中给一个变量名赋值是(而不是在一个表达式中对其进行引用),Python总是创建或改变本地作用域的变量名,除非它已经在那个函数中被声明为全局变量. ”

python中golbal全局变量和nonlocal局部变量

global关键字用来在函数或其他局部作用域中使用全局变量。

gcount = 0 #定义了一个全局变量,(可以省略global关键字)
 
def global_test():
 print (gcount) #不修改,只是引用全局变量,不使用global关键字
 
def global_counter():
 global gcount 
 gcount +=1 #修改全局变量,需要使用global关键字
 return gcount

输出

1

2

3

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

def make_counter(): 
 count = 0 #定义一个局部变量,该局部变量作用范围在make_counter()方法内
 def counter(): 
 nonlocal count #在方法counter()中使用外层局部变量 count 
 count += 1 
 return count 
 return counter 
 
def make_counter_test(): 
 mc = make_counter() 
 print(mc())
 print(mc())
 print(mc())
 
make_counter_test()

输出

3

下载本文
显示全文
专题