目录
- 1 定义
- 2 作用域的重要性
- 2.1 全局作用域中的代码不能使用任何局部变量
- 2.2 局部作用域中的代码可以访问全局变量
- 2.3 不同局部作用域中的变量不能相互调用
- 2.4 在不同的作用域中,可以使用相同的名字命名不同的变量
- 3 全局变量与局部变量同名
- 4 global
- 5 全局变量和局部变量的优先级
- 参考内容
- 在被调用函数内赋值的变量是局部变量
- 在所有函数之外赋值的变量是局部变量
2 作用域的重要性
- 全局作用域中的代码不能使用任何局部变量
- 局部作用域中的代码可以访问全局变量
- 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量
- 在不同的作用域中,可以使用相同的名字命名不同的变量
2.1 全局作用域中的代码不能使用任何局部变量
def spam():egg = 'this is in function spam'spam()print(egg)
在函数spam()
(局部作用域)中给egg赋值,然后在全局作用域中调用函数spam()
文章插图
运行后显示,egg未被定义
egg是局部变量,而
print(egg)
中的变量egg是全局变量,全局作用域中的代码不能使用局部作用域中的变量这一点我理解为:在调用子函数
spam()
时,创建了一个局部作用域,并在局部作用域中定义了一个局部变量,当子函数调用结束后,局部作用域和内部定义的局部变量一起没销毁,因此在全局作用域中,找不到egg这个局部变量2.2 局部作用域中的代码可以访问全局变量
def spam():print(egg)egg = 'Outside the function'spam()
文章插图
全局变量在声明或赋值时被创建,直到程序被终止或执行结束
如果在egg赋值前调用函数
def spam():print(egg)spam()egg = 'Outside the function'
文章插图
这时候会显示变量未被定义
2.3 不同局部作用域中的变量不能相互调用
def spam():print(egg)def init():egg = 'this is in init funcion'init()spam()
文章插图
2.4 在不同的作用域中,可以使用相同的名字命名不同的变量
def spam():egg = 'this is in spam function'print(egg)def init():egg = 'this is in init funcion'print(egg)#egg = 'Out side function'#print(egg)init()spam()
文章插图
两个子函数中都定义了变量egg,但在打印时,互不影响
3 全局变量与局部变量同名在上面说到,可以在局部作用域中调用全局变量,并且在给出的例子中,我们的子函数中只有一个print操作,但如果一个变量既在全局作用域中定义,又在局部作用域中定义,那么会出现什么样的打印结果
def spam():egg = 'this is in spam function'print(egg)def init():egg = 'this is in init funcion'print(egg)egg = 'Out side function'print(egg)init()spam()
文章插图
经验总结扩展阅读
- 如何让差生学习好英语
- 初等数论学习笔记 III:数论函数与筛法
- 为什么有些人会孤立认真学习的人
- 苹果ipad分屏功能怎么使用(ipad 9可以分屏学习吗)
- 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin
- 1 Libgdx游戏学习——环境配置及demo运行
- 电信卡查通话记录和短信怎么查
- Go设计模式学习准备——下载bilibili合集视频
- 学习ASP.NET Core Blazor编程系列五——列表页面
- 小学生的学习动机是什么