# 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)
```

When we run the above program, the output will be:

```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()`。