16. 如何在局部作用域内使用全局变量?

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