English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在阅读本文之前,请确保您已掌握Python全局,局部和非局部变量的一些基础知识。
在Python中,global关键字允许您在当前作用域之外修改变量。它用于创建全局变量并在局部上下文中对该变量进行更改。
Python中global关键字的基本规则是:
当我们在函数内部创建变量时,默认情况下它是局部的。
当我们在函数外部定义变量时,默认情况下它是全局的。您不必使用global关键字。
我们使用global关键字在函数内部读写全局变量。
在函数外使用global关键字无效
让我们举个实例。
c = 1 # 全局变量 def add(): print(c) add()
当我们运行上面的程序时,输出将是:
1
但是,在某些情况下,我们需要从函数内部修改全局变量。
c = 1 # 全局变量 def add(): c = c + 2 # increment c by 2 print(c) add()
当我们运行上面的程序时,输出显示错误:
UnboundLocalError: local variable 'c' referenced before assignment
这是因为我们只能访问全局变量,而不能从函数内部对其进行修改。
解决方案是使用global关键字。
c = 0 # 全局变量 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中,我们创建一个模块config.py来保存全局变量,并在同一程序中的Python模块之间共享信息。
这是我们如何在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.py, update.py, main.py 세 개의 파일을 생성했습니다.
모듈 config.py에 저장됩니다a와b의전역 변수. update.py 파일에서 config.py 모듈을 가져오고 수정합니다a와b의 값입니다. 또한, main.py 파일에서 config.py와 update.py 모듈을 동시에 가져옵니다. 마지막으로, 전역 변수의 값을 변경 여부와 관계없이 출력하고 테스트합니다.
이는 중첩 함수에서 전역 변수를 사용하는 방법입니다.
def foo(): x = 20 def bar(): global x x = 25 print("bar 호출 전:", x) print("바로 bar 호출") bar() print("bar 호출 후:", x) foo() print("x가 주체 내에서:", x)
출력은 다음과 같습니다:
bar 호출 전: 20 바로 bar 호출 bar 호출 후: 20 x가 주체 내에서: 25
위 프로그램에서는 중첩된 함수 bar()에서 전역 변수를 선언했습니다. foo() 함수에서는 x에 대한 전역 키워드에 영향을 미치지 않습니다.
bar 호출 전후에서 변수 x는 지역 변수의 값을 받습니다. 즉, x =20. foo 함수 밖에서 변수 x는 bar 함수에서 정의된 값을 취하게 됩니다. 즉, x =25이유는 x에서 global 키워드를 사용하여 bar 함수(지역 범위) 내에서 전역 변수를 생성했기 때문입니다.
bar() 함수에서 어떤 변경 사항을 하였다면, 이 변경 사항은 지역 범위 밖에도 나타나게 됩니다. 즉, foo()에요.