21天学习python编程_作用域
2021-04-10 14:28
标签:查找 ror sig 根据 close efi ati sed 学习python 如果看完这篇文章,你还是弄不明白函数作用域; 命名空间:LEGB原则 Local:函数内的名字空间; 一个例子: 看下不同变量命名空间: LEGB说明: Local:局部变量,函数或者方法内部作用域; 例1: 结果: 分析: func内部,没有x变量名,去上一层查找 例2: 结果: 分析: func内部,x命名空间在func中,查找x时候,先从func内部查找,所以x为2 例3: 结果错误:使用了没有初始化变量 分析问题: 在func内部,定义变量x=2, 所以会出现上述问题。 例: 结果: 可以看到:在func内部与全局命名空间中都有变量x。 问题:如何在函数中修改全局变量?使用global 例: 结果,对x修改全局有效: 21天学习python编程_作用域 标签:查找 ror sig 根据 close efi ati sed 学习python 原文地址:https://blog.51cto.com/huangyg/2512746
你来找我,我保证不打你,我给你发100的大红包。1. 命名空间
Enclosed:外部嵌套函数的名字空间;
Global:函数定义所在模块(文件)的名字空间;
Built-in:Python内置模块的名字空间;g = 10
def func():
x = 2
def foo(v):
return pow(v,x)
return foo
foo(v):v在foo内部,属于:Local
x=2:x在func内部,对于func数据;Local
x=2:对于foo函数来说,位于嵌套函数外部,属于Enclosed
g=10:在文件内部,属于:Global
pow:内置模块,属于Built-in
2. 作用域
2.1 作用域与命名空间关系:
2.2 作用域的LEGB原则:
Enclosed:嵌套函数内部作用域;
Global:全局变量,模块(文件)内部作用域;
Built-in:Python内置变量;
2.3 常见案例:
x = 10
def func(v):
print(‘in func x:‘, x)
r = x*v
return r
func(3)
print(‘in file x:‘, x)
in func x: 10
in file x: 10
全局变量:找到x=10,所以在func内部,x的值为10
print函数:Built-inx = 10
def func(v):
x = 2
print(‘in func x:‘,x)
return x*v
func(3)
#调用func后,x的值是多少?
print(‘in file x:‘, x)
in func x: 2
in file x: 10
func内部:x=2,只是在func内部赋值,对全局的x没有任何影响;x = 10
def func(v):
r = x*v
print(‘in func x:‘, x)
x = 2
return r
func(3)
print(‘in file x:‘, x)
UnboundLocalError: local variable ‘x‘ referenced before assignment
在x初始化前调用:r = x*v,使用了没有初始化的变量;3. globals()与locals()函数
x = 10
def func(v):
x = 2
r = x*v
print("in func locals():", locals())
print("in func globals():", globals())
return r
func(3)
in func locals(): {‘v‘: 3, ‘x‘: 2, ‘r‘: 6}
in func globals(): {‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <_frozen_importlib_external.sourcefileloader object at>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘:
4. global与nonlocal关键字
x = 10
def changex():
global x
x = 0
print(‘in changex x:‘, x)
changex()
print(‘out changex x:‘, x)
in changex x: 0
out changex x: 0
总结:
下一篇:DQL 语言 --条件查询