我最近开始学习Python,我遇到了一个我不明白的例子:
def teste():
print(a, b)
a = 5
b = 4
teste() # Outputs '5 4'这里发生了什么事?因为这些变量是全局变量,teste()能够访问a和b吗?
发布于 2022-11-22 23:44:46
简短的回答是的。从这个意义上说,a和b是全局变量。长答案,只要您将变量名保留在赋值的右侧上,或者只是将变量名称传递给函数中的函数,它们就会充当全局变量。
所发生的事情是,Python将首先查看该函数的本地作用域中的变量名,并且只有当它找不到变量名时,才会找到下一个作用域,即您的示例中的全局范围。
函数foo没有名为a的变量,因此在下一个可用范围中进行搜索。
a = "global a"
def foo():
# No variable 'a' in local scope of foo()
# Getting value of 'a' from the scope where foo() is called
print(a)
foo() # Prints "global a"如果要在函数中将变量声明为全局变量,可以使用global关键字。这样,就可以为现在的全局变量设置一个新的值:
a = "global a"
def foo():
global a
a = "Changed in function"
print(a) # Prints "global a"
foo() # assigns new value to a
print(a) # Prints "Changed in function"如果不使用global关键字,只要在赋值左侧的函数中使用相同的变量名,就会创建一个local变量,用相同的名称遮盖global变量:
a = "global a"
def foo():
a = "local a"
print(a)
print(a) # Prints "global a"
foo() # Prints "local a"
print(a) # Prints "global a"https://stackoverflow.com/questions/74540137
复制相似问题