繁体   English   中英

function如何访问function内部未定义的变量?

[英]How can a function access variables that are not defined inside the function?

我最近开始研究 Python,我遇到了一个我不明白的例子:

def teste():
    print(a, b)
    
a = 5
b = 4
teste() # Outputs '5 4'

这里发生了什么? teste()是否能够访问ab因为这些变量是全局变量?

简短的回答,是的。 ab在这个意义上是全局变量。 答案很长,只要您将变量名称保留在赋值的右侧,或者只是它们传递给 function 中的 function,它们就会充当全局变量。

发生的事情是 Python 将首先在该 function 的本地 scope 中查找变量名称,并且仅当它没有找到下一个 scope 的 go 时,在您的示例中是全局 scope。

Function foo没有名为a变量 so Python 在下一个可用的中搜索 scope

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"

如果要在 function 中将变量声明为全局变量,可以使用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关键字,一旦您在赋值左侧的 function 中使用相同的变量名称,您就会创建一个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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM