Python教程-3.6节:Python全局关键字

Python全局关键字

在本文中,您将了解全局关键字,全局变量以及何时使用全局关键字。

在阅读本文之前,请确保您已掌握Python全局,局部和非局部变量的一些基础知识。


什么是全局关键字

在Python中,global关键字允许您在当前作用域之外修改变量。它用于创建全局变量并在局部上下文中对该变量进行更改。


全局关键字规则

globalPython中关键字的基本规则是:

  • 当我们在函数内部创建变量时,默认情况下它是局部的。
  • 当我们在函数外部定义变量时,默认情况下它是全局的。您不必使用global关键字。
  • 我们使用global关键字在函数内部读写全局变量。
  • global在函数外部使用关键字无效。

全局关键字的使用

让我们举个例子。

示例1:从函数内部访问全局变量

c = 1 # global variable

def add():
    print(c)

add()

运行代码

当我们运行上面的程序时,输出将是:

1

但是,在某些情况下,我们需要从函数内部修改全局变量。


示例2:从函数内部修改全局变量

c = 1 # global variable
    
def add():
    c = c + 2 # increment c by 2
    print(c)

add()

运行代码

当我们运行上面的程序时,输出显示错误:

UnboundLocalError:赋值之前引用了局部变量“ c”

这是因为我们只能访问全局变量,而不能从函数内部对其进行修改。

解决方案是使用global关键字。


示例3:使用global从函数内部更改global变量

c = 0 # global variable

def add():
    global c
    c = c + 2 # increment by 2
    print("Inside add():", c)

add()
print("In main:", c)

运行代码

当我们运行上面的程序时,输出将是:

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文件,以存储全局变量

a = 0
b = "empty"

创建一个update.py文件,更改全局变量

import config

config.a = 10
config.b = "alphabet"

创建一个main.py文件,以测试值的变化

import config
import update

print(config.a)
print(config.b)

当我们运行main.py文件时,输出将是

10
alphabet

在上文中,我们已经创建了三个文件:config.pyupdate.py,和main.py

该模块config.py存储以下变量的全局变量一个 和 b。在update.py文件中,我们导入config.py模块并修改以下值一个 和 b。同样,在main.py文件中,我们同时导入config.pyupdate.py模块。最后,我们打印并测试全局变量的值,无论它们是否更改。


全局嵌套函数

这是在嵌套函数中使用全局变量的方法。

示例5:在嵌套函数中使用全局变量

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)

运行代码

输出为:

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。这是因为我们在中使用了global关键字Xbar()函数内部创建全局变量(局部作用域)。

如果我们在bar()函数内部进行任何更改,则更改将显示在本地范围之外,即foo()

0