Python中的全局关键字
全局关键字是允许用户修改当前范围之外的变量的关键字。它用于从非全局范围(即在函数内部)创建全局变量。仅当我们要进行赋值或要更改变量时,才在函数内部使用全局关键字。打印和访问不需要全局。
全局关键字规则:
- 如果一个变量在函数体内的任何地方都被赋值,除非明确声明为全局变量,否则它被假定为局部变量。
- 仅在函数内部引用的变量是隐式全局的。
- 我们使用 global 关键字在函数内部使用全局变量。
- 不需要在函数之外使用 global 关键字。
全局关键字的使用:
要访问函数内部的全局变量,无需使用 global 关键字。
示例 1:
# Python program showing no need to
# use global keyword for accessing
# a global value
# global variable
a = 15
b = 10
# function to perform addition
def add():
c = a + b
print(c)
# calling a function
add()
输出:
25
如果我们需要为全局变量分配一个新值,那么我们可以通过将变量声明为全局变量来实现。
代码 2:没有全局关键字
# Python program showing to modify
# a global value without using global
# keyword
a = 15
# function to change a global value
def change():
# increment value of a by 5
a = a + 5
print(a)
change()
输出:
UnboundLocalError: local variable 'a' referenced before assignment
此输出是一个错误,因为我们试图为外部作用域中的变量赋值。这可以通过使用全局变量来完成。
代码 3:带全局关键字
# Python program to modify a global
# value inside a function
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()
内部的值所看到的,更改也反映在全局变量外部的值中。跨Python模块的全局变量:
在同一程序中的不同模块之间共享全局变量的最佳方法是创建一个特殊模块(通常命名为 config 或 cfg)。在应用程序的所有模块中导入配置模块;然后该模块可作为全局名称使用。每个模块只有一个实例,因此对模块对象所做的任何更改都会在各处反映出来。例如,跨模块共享全局变量
代码1:创建一个config.py
文件来存储全局变量:
x = 0
y = 0
z ="none"
代码2:创建一个modify.py
文件来修改全局变量:
import config
config.x = 1
config.y = 2
config.z ="geeksforgeeks"
这里我们修改了 x、y 和 z 的值。这些变量是在模块config.py
中定义的,因此我们必须导入config
模块,我们可以使用config.variable_name
来访问这些变量。
代码3:创建main.py
文件修改全局变量:
import config
import modify
print(config.x)
print(config.y)
print(config.z)
输出:
1
2
geeksforgeeks
嵌套函数中的全局
为了在嵌套函数中使用 global,我们必须在嵌套函数中声明一个带有 global 关键字的变量
# 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()函数内创建了全局变量(局部作用域)。