Python 中的全局关键字


在本文中,我们将介绍全局关键字、Python 中全局关键字的基本规则、局部变量和全局变量之间的区别以及 Python 中全局关键字的示例。

python 中全局关键字的用途是什么?

全局关键字是允许用户修改当前范围之外的变量的关键字。它用于在 Python 中从非全局范围(即函数内部)创建全局变量。仅当我们想要进行赋值或想要更改变量时,才在函数内部使用全局关键字。打印和访问不需要全局。

全局关键字规则:

  • 如果在函数体内的任何位置为变量赋值,则假定该变量是局部变量,除非显式声明为全局变量。
  • 仅在函数内部引用的变量是隐式全局的。
  • 我们使用 global 关键字在函数内使用全局变量。
  • 无需在函数外部使用全局关键字。

Python中global关键字的使用:要访问函数内的全局变量,不需要使用global关键字。

python 示例中的全局关键字

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

Python3

# global variable
a = 15
b = 10

# function to perform addition
def add():
    c = a + b
    print(c)


# calling a function
add()

输出:

25

如果我们需要为全局变量分配新值,那么我们可以通过将该变量声明为全局变量来实现。

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

Python3

a = 15


# function to change a global value
def change():
    # increment value of a by 5
    b = a + 5
    a = b
    print(a)


change()

输出:

UnboundLocalError: local variable 'a' referenced before assignment

此输出是一个错误,因为我们尝试为外部作用域中的变量赋值。这可以通过使用全局变量来完成。

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

Python3

x = 15


def change():
    # using a global keyword
    global x

    # increment value of a by 5
    x = x + 5
    print("Value of x inside a function :", x)


change()
print("Value of x outside a function :", x)

输出:

Value of x inside a function : 20
Value of x outside a function : 20

在上面的例子中,我们首先在函数change()中将x定义为全局关键字。然后 x 的值增加 5,即 x=x+5,因此我们得到的输出为 20。正如我们通过更改函数 Change() 内部的值所看到的,该更改也反映在全局变量外部的值中。

修改全局可变对象

示例 1:不使用 global 关键字修改列表元素。

在这里,我们可以修改全局范围内定义的列表元素,而无需使用 global 关键字。因为我们没有修改与变量 arr 关联的对象,而是修改列表包含的项目。由于列表是可变的数据结构,因此我们可以修改其内容。

Python3

arr = [10, 20, 30]


def fun():
    for i in range(len(arr)):
        arr[i] += 10


print("'arr' list before executing fun():", arr)
fun()
print("'arr' list after executing fun():", arr)

输出:

'arr' list before executing fun(): [10, 20, 30]
'arr' list after executing fun(): [20, 30, 40]

示例 2:使用 global 关键字修改列表变量。

这里我们尝试将一个新列表分配给全局变量。因此,我们需要在创建新对象时使用 global 关键字。在这里,如果我们不使用 global 关键字,那么将使用新的列表元素创建一个新的局部变量 arr 。但全局变量 arr 将保持不变。

Python3

arr = [10, 20, 30]


def fun():
    global arr
    arr = [20, 30, 40]


print("'arr' list before executing fun():", arr)
fun()
print("'arr' list after executing fun():", arr)

输出:

'arr' list before executing fun(): [10, 20, 30]
'arr' list after executing fun(): [20, 30, 40]

跨 Python 模块的全局变量

在同一程序中的不同模块之间共享全局变量的最佳方法是创建一个特殊的模块(通常名为 config 或 cfg)。在应用程序的所有模块中导入配置模块;然后该模块就可以作为全局名称使用。每个模块只有一个实例,因此对模块对象所做的任何更改都会反映到各处。例如,跨模块共享全局变量。

代码1:创建config.py文件来存储全局变量

Python3

x = 0
y = 0
z = "none"

代码2:创建modify.py文件修改全局变量

Python3

import config
config.x = 1
config.y = 2
config.z = "geeksforgeeks"

这里我们修改了x、y和z的值。这些变量是在 config.py 模块中定义的,因此我们必须导入 config 模块,并可以使用 config.variable_name 来访问这些变量。

创建main.py文件修改全局变量

Python3

import config
import modify
print(config.x)
print(config.y)
print(config.z)

输出:

1
2
geeksforgeeks

嵌套函数中的全局

为了在嵌套函数中使用 global,我们必须在嵌套函数中声明一个带有 global 关键字的变量

Python3

# Python program showing a use of
# global in nested function

def add():
    x = 15
    def change():
        global x
        x = 20
    print("Before making changing: ", x)
    print("Making change")
    change()
    print("After making change: ", x)

add()
print("value of x", x)

输出:

Before making changing:  15
Making change
After making change:  15
value of x 20

在上面的例子中,在进行change()之前和之后,变量x取局部变量的值,即x = 15。在add()函数之外,变量x将取change()函数中定义的值,即x = 20。因为我们在x中使用了global关键字在change()函数内部(局部范围)创建了一个全局变量。


原文链接:codingdict.net