python作用域
局部和全局作用域
在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。在所有函数之外赋值的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量称为“全局变量”。作用域遵循如下的原则:
- 全局作用域的代码不能使用任何局部变量
- 局部作用域可以访问全局变量
- 一个函数的局部作用域的代码,不能使用其他局部作用域的变量。
- 在不同的作用域中,可以使用相同的名字命名不同的变量。
1 def spam(): 2 eggs = 31337 3 spam() 4 print(eggs)
如上所示的代码,运行之后将会报出如下所示的错误:
Traceback (most recent call last): NameError: name 'eggs' is not defined
报错的原因是没有找到变量eggs,因为在全局变量域中引用了局部变量,而程序执行在全局作用域重视,不存在局部作用域,所以不会有任何局部变量。这就是为什么只有全局变量能用于全局作用域。
2.局部作用域不能使用其他局部作用域内的变量
一个函数被调用时,就创建了一个新的局部作用域,这包括一个函数被另一个函数调用时的情况。
def spam(): eggs = 99 bacon() print(eggs) def bacon(): ham = 101 eggs=0 spam()
上示代码中两个函数都对变量eggs进行了定义,且spam函数对bacon函数进行了引用。但因为一个函数中的局部变量完全与其他函数中的局部变量分隔开来。所以代码的输出结果如下所示:
99
3.全局变量可以在局部作用域中读取
eggs = 42 def spam(): print(eggs) spam()
上示代码先定义了一个全局变量eggs,之后在函数中打印全局变量的值。最后调用函数spam。输出结果如下:
42
4.名称相同的局部变量和全局变量
名称相同的局部变量和全局变量在python中是完全合法的。但因为在代码中多个变量同名,在追踪时不方便,且容易让人混淆,所以不介意使用。在此也不做示例。
5.global语句
使用global语句可以将函数内的变量修改成全局变量。
学以致用,知行合一
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期