💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Python `global`关键字 > 原文: [https://www.programiz.com/python-programming/global-keyword](https://www.programiz.com/python-programming/global-keyword) #### 在本文中,您将了解`global`关键字,`global`变量以及何时使用`global`关键字。 在阅读本文之前,请确保您具有 [Python 全局,局部和非局部变量](/python-programming/global-local-nonlocal-variables)的一些基础知识。 * * * ## 什么是`global`关键字 在 Python 中,`global`关键字允许您在当前作用域之外修改变量。 它用于创建全局变量并在局部上下文中对变量进行更改。 * * * ## `global`关键字规则 Python 中`global`关键字的基本规则是: * 当我们在函数内部创建变量时,默认情况下它是局部的。 * 当我们在函数外部定义变量时,默认情况下它是全局变量。 您不必使用`global`关键字。 * 我们使用`global`关键字在函数内部读写全局变量。 * 在函数外部使用`global`关键字无效。 * * * ## `global`关键字的使用 让我们举个例子。 #### 示例 1:从函数内部访问全局变量 ```py c = 1 # global variable def add(): print(c) add() ``` 当我们运行上面的程序时,输出将是: ```py 1 ``` 但是,在某些情况下,我们需要从函数内部修改全局变量。 * * * #### 示例 2:从函数内部修改全局变量 ```py c = 1 # global variable def add(): c = c + 2 # increment c by 2 print(c) add() ``` 当我们运行上面的程序时,输出显示错误: ```py UnboundLocalError: local variable 'c' referenced before assignment ``` 这是因为我们只能访问全局变量,而不能从函数内部对其进行修改。 解决方案是使用`global`关键字。 * * * #### 示例 3:使用`global`从函数内部更改全局变量 ```py c = 0 # global variable def add(): global c c = c + 2 # increment by 2 print("Inside add():", c) add() print("In main:", c) ``` 当我们运行程序时,输出将是: ```py Inside add(): 2 In main: 2 ``` 在以上程序中,我们将`c`定义为`add()`函数内部的全局变量。 然后,将变量`c`增加`1`,即`c = c + 2`。 之后,我们调用`add()`函数。 最后,我们打印全局变量`c`。 可以看到,函数`c = 2`之外的全局变量也发生了变化。 * * * ## 跨 Python 模块的全局变量 在 Python 中,我们创建一个模块`config.py`来保存全局变量,并在同一程序中的 Python 模块之间共享信息。 这是我们如何在 python 模块之间共享全局变量的方法。 #### 示例 4:跨 Python 模块共享全局变量 创建一个`config.py`文件,以存储全局变量 ```py a = 0 b = "empty" ``` 创建一个`update.py`文件,以更改全局变量 ```py import config config.a = 10 config.b = "alphabet" ``` 创建一个`main.py`文件,以测试值的变化 ```py import config import update print(config.a) print(config.b) ``` 当我们运行`main.py`文件时,输出为 ```py 10 alphabet ``` 在上面,我们创建了三个文件:`config.py`,`update.py`和`main.py`。 模块`config.py`存储`a`和`b`的全局变量。 在`update.py`文件中,我们导入`config.py`模块并修改`a`和`b`的值。 同样,在`main.py`文件中,我们同时导入了`config.py`和`update.py`模块。 最后,我们打印并测试全局变量的值,无论它们是否更改。 * * * ## 全局嵌套函数 这是在嵌套函数中使用全局变量的方法。 #### 示例 5:在嵌套函数中使用全局变量 ```py def foo(): x = 20 def bar(): global x x = 25 print("Before calling bar: ", x) print("Calling bar now") bar() print("After calling bar: ", x) foo() print("x in main: ", x) ``` 输出为: ```py Before calling bar: 20 Calling bar now After calling bar: 20 x in main: 25 ``` 在上面的程序中,我们在嵌套函数`bar()`中声明了一个全局变量。 在`foo()`函数内部,`x`对`global`关键字无效。 在调用`bar()`之前和之后,变量`x`采用局部变量的值,即`x = 20`。 在`foo()`函数之外,变量`x`将采用`bar()`函数中定义的值,即`x = 25`。 这是因为我们在`x`中使用了`global`关键字在`bar()`函数(局部范围)内创建了全局变量。 如果我们在`bar()`函数内进行任何更改,则这些更改将显示在本地范围之外,即`foo()`。