PHP前端开发

python如何在非创建全局变量的地方使用全局变量

百变鹏仔 2个月前 (01-23) #Python
文章标签 全局变量

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

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

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

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

立即学习“Python免费学习笔记(深入)”;

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