您的位置:首页 > 编程语言 > Python开发

Python:变量作用域 什么是全局变量、局部变量

2018-09-09 10:52 239 查看
版权声明:本人原创文章,转载请注明出处 https://blog.csdn.net/qq_28766729/article/details/82556516

变量作用域

变量由作用范围来限制,按照作用域分类可分为:
- 全局(global): 在函数外部定义
- 局部(local):在函数内部定义

变量的作用范围:
  • 全局变量:在整个全局范围都有效
  • 全局变量在局部可以使用(即函数内部可以方位函数外部定义的变量)
  • 局部变量在局部范围可以使用
  • 局部变量在全局范围无法使用,在局部范围内(比如函数)将局部变量用global函数定义为全局函数,并且调用了此函数后,在全局范围内能调用此局部变量。
    LEGB原则
    L(Local)局部作用域
    E(Enclosing function locale)外部嵌套函数作用域
    G(Global module)函数定义所在模块作用域
    B(Buildin): python内置魔抗的作用域

global函数

使用global函数可以将局部范围内(比如函数)的局部变量提升为全局变量。

def fun():
global a2
global a3#将a2、a3定义为全局变量
a2=20
print(a2)
a3 =99
print(a3)
#print(a2)调用函数前,调用内部变量a2会报错
fun()#只有在调用此函数后,内部的局部变量才能被调用
print(a2)
print(a3)

20
99
20
99

再举一个例子

b2 = 22#全局变量
def fun():
b2 = 99#局部变量
print(b2)
print(b2)
fun()#函数调用全局变量,输出b2=99
print(b2)#函数内部没定义b2为全局变量,所以依然输出为22

22
99
22

globals, locals函数

可以通过globals和locals显示出局部变量和全局变量,可以从我之前编的汉诺塔程序体会到Locals函数的好处,可以帮助理解递归中,各个变量的赋值变化。

locas函数:

函数功能为,返回当前作用域内的局部变量和其值组成的字典,与globals函数类似(返回全局变量),可用于函数内。函数所返回的字典集合不能修改,不知道能不能将其转换为列表进行更改,下次试试。

def hanoi(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
print(locals())
hanoi(n-1,a,c,b)#
print(locals())
hanoi(1,a,b,c)
print(locals())
hanoi(n-1,b,a,c)
print(locals())
hanoi(3,'A','B','C')

{'c': 'C', 'b': 'B', 'a': 'A', 'n': 3}
{'c': 'B', 'b': 'C', 'a': 'A', 'n': 2}
A --> C
{'c': 'B', 'b': 'C', 'a': 'A', 'n': 2}
A --> B
{'c': 'B', 'b': 'C', 'a': 'A', 'n': 2}
C --> B
{'c': 'B', 'b': 'C', 'a': 'A', 'n': 2}
{'c': 'C', 'b': 'B', 'a': 'A', 'n': 3}
A --> C
{'c': 'C', 'b': 'B', 'a': 'A', 'n': 3}
{'c': 'C', 'b': 'A', 'a': 'B', 'n': 2}
B --> A
{'c': 'C', 'b': 'A', 'a': 'B', 'n': 2}
B --> C
{'c': 'C', 'b': 'A', 'a': 'B', 'n': 2}
A --> C
{'c': 'C', 'b': 'A', 'a': 'B', 'n': 2}
{'c': 'C', 'b': 'B', 'a': 'A', 'n': 3}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: