首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数如何访问函数中未定义的变量?

函数如何访问函数中未定义的变量?
EN

Stack Overflow用户
提问于 2022-11-22 23:28:58
回答 1查看 43关注 0票数 -1

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

代码语言:javascript
运行
复制
def teste():
    print(a, b)
    
a = 5
b = 4
teste() # Outputs '5 4'

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-22 23:44:46

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

所发生的事情是,Python将首先查看该函数的本地作用域中的变量名,并且只有当它找不到变量名时,才会找到下一个作用域,即您的示例中的全局范围。

函数foo没有名为a的变量,因此在下一个可用范围中进行搜索。

代码语言:javascript
运行
复制
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关键字。这样,就可以为现在的全局变量设置一个新的值:

代码语言:javascript
运行
复制
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变量:

代码语言:javascript
运行
复制
a = "global a"

def foo():
    a = "local a"
    print(a)

print(a)  # Prints "global a"
foo()  # Prints "local a"
print(a)  # Prints "global a"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74540137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档