如何在局部作用域内使用全局变量?¶
Python中,有全局变量和局部变量之分。
在程序遇到一个变量标识符的话他会按照这样的顺序进行搜索:本地作用域(即函数作用域), 全局作用域和内置作用域。所以我们的局部变量会覆盖全局和内置的变量或函数。
从全局变量的视点来看:
在局部作用域里面,如果修改全局变量,则需要事先使用global进行声明,表示其使用的是全局变量。 如果仅使用全局变量的值,不修改他的值,则可以直接引用全局变量。不用特别声明。
从函数的视点来看:
函数内部仅引用其变量值的都是全局变量。在函数作用域内要赋值的变量都是局部变量,除非用global来 声明。
示例1如下::
s = "hongkong"
def fn():
s = "beijing"
print(s)
fn()
print(s)
函数fn中的变量s为局部变量,另外一个s为全局变量,对局部变量的修改,不影响全局变量。 输出内容为:
beijing
hongkong
示例2如下:
s = "hongkong"
def fn():
print(s)
s = "beijing"
print(s)
fn()
print(s)
在函数内部引用的是局部变量还是全局变量并不清楚,在函数fn内部首先是使用,再是赋值。 没有说明全局变量,就是局部变量,但在局部变量赋值之前又有使用。因此执行后会输出以下错误,
UnboundLocalError: local variable ‘s’ referenced before assignment
我们要修改为引用全局变量就需要在函数的第一行增加global s