python函数的命名空间

1,细说变量:对于赋值语句,例如x = 1,类似于字典的键值,有一个vars内置函数,返回一个不可见的字典

x = 1
y = vars()
print(y['x'])
print(y['x']+=1)
# 输出为 1,2

可见命名空间即为一个储存变量的字典
2,locals,globals函数,用来获取当前作用域的命名空间,返回为字典
如果在全局作用域中用locals函数,则获取全局作用域命名空间,若在函数内用globals函数,则获取局部作用域命名空间。globals函数表示全局作用域命名空间

a = 10
print(locals())
print(globals())
#输出为
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020E0350FEF0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '序列简书.py', '__cached__': None, 'ndint': <function ndint at 0x0000020E034CC268>, 'a': 10}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020E0350FEF0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '序列简书.py', '__cached__': None, 'ndint': <function ndint at 0x0000020E034CC268>, 'a': 10}
# 二者这时没有区别,都返回相同的字典
看来可以通过赋值语句来生成字典,那么可不可以反过来呢,看代码
a = 10
locals()['b'] = 20 #赋值即为b = 20
print(b)  
# 输出为 20
可见可以用字典的方式来赋值!!!!!

3,globals和locals函数的区别,看代码

a = 15
def x():
	b = 20
	print(locals())
	print(globals())
x()

# 输出为
{'b': 20}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001776643FEF0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '序列简书.py', '__cached__': None, 'a': 15, 'x': <function x at 0x00000177663FC268>}

3,用字典方式修改全局变量和局部变量

a = 10
def b():
	c = 20
	locals()['c'] = 10 #修改局部变量值
	globals()['a'] = 20 #修改全局变量值
	print(a)
	print(b)
b()
# 输出为
20
20
locals() 返回是当前局部变量的深拷贝,修改locals() 中变量值,实际上对于原变量是没有任何影响的。而globals()返回的是全局变量的字典,修改其中的内容,值会真正的发生改变。 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值