跳至内容

Python Global关键字

Python中,global关键字支持在函数作用域内修改全局变量。在学习本章节之前,请先阅读 Python 作用域章节。

修改global变量

全局变量可以在函数内读取,但是不能修改。否则就会报错。

python
# 全局变量
g = 1

def func_add():
    g = g+1
    print(g)

func_add()


# 输出:
# UnboundLocalError: local variable 'g' referenced before assignment
# 全局变量
g = 1

def func_add():
    g = g+1
    print(g)

func_add()


# 输出:
# UnboundLocalError: local variable 'g' referenced before assignment

要实现在函数内修改全局变量,需要使用 global 关键字声明。

python
# 全局变量
g = 1

def func_add():
    # 使用global变量声明后,就可以修改了
    global g
    g = g+1
    print(g)

func_add()


# 输出:
# 2
# 全局变量
g = 1

def func_add():
    # 使用global变量声明后,就可以修改了
    global g
    g = g+1
    print(g)

func_add()


# 输出:
# 2

嵌套函数内使用

Python中,可以在嵌套函数中使用global关键字。

python
def func_outer():
    num = 10

    def func_inner():
        global num
        num = 15

    print("调用func_inner()前,num:", num)    
    func_inner()
    print("调用func_inner()后,num:", num)  

func_outer()
print("func_outer外,num:", num)


# 输出:
# 调用func_inner()前,num:10
# 调用func_inner()后,num:10
# func_outer外,num:15
def func_outer():
    num = 10

    def func_inner():
        global num
        num = 15

    print("调用func_inner()前,num:", num)    
    func_inner()
    print("调用func_inner()后,num:", num)  

func_outer()
print("func_outer外,num:", num)


# 输出:
# 调用func_inner()前,num:10
# 调用func_inner()后,num:10
# func_outer外,num:15

这里,需要注意的是调用func_inner后,num为什么仍然是10呢? 这是因为在嵌套函数内,num变量被声明为global,其修改只会在global作用域生效。

关键字规则

  • 函数内创建变量,默认是local变量
  • 函数外创建变量,默认是global变量,不需要加global关键字
  • 函数内读写global变量,需要使用global关键字声明