- 先看一个例子:
x=2
def funcx():
x=9
print("I am in funcx()-->{}".format(x))
funcx()
print('I am outside funcx()-->{}'.format(x))
>>>
# 以下结果都没毛病
I am in funcx()-->9
I am outside funcx()-->2
现在修改一下:
x=2
def funcx():
# 修改之处
global x
x=9
print("I am in funcx()-->{}".format(x))
funcx()
print('I am outside funcx()-->{}'.format(x))
>>>
I am in funcx()-->9
I am outside funcx()-->9
"""
glocal 是声明全局变量的关键字
"""
- 另一个实例:
def outer_foo():
a=10
def inner_foo():
a=20
'''nonlocal a
a=a+10'''
print("inner_foo,a={}".format(a))
inner_foo() # inner_foo,a=20
print("outer_foo,a={}".format(a))
a=30
outer_foo() # outer_foo,a=10
print("a={}".format(a)) # a=30
"""
以上结果也都没毛病,a在各自的作用域发挥自己的作用
"""
# 复习一下前面的"nonlocal"
# 上面例子修改一下
def outer_foo():
a=10
def inner_foo():
# 修改之处
# 如果用a来运算,肯定是报错的,因为引用了外部变量
# 加这句运行就正常了
# nonlocal a
a=a+30
print("inner_foo,a={}".format(a))
inner_foo() # inner_foo,a=20
print("outer_foo,a={}".format(a))
a=30
outer_foo() # outer_foo,a=10
print("a={}".format(a)) # a=30
>>>
UnboundLocalError: local variable 'a' referenced before assignment
- 命名空间:locals(),globals()
def foo(num ,str):
name='qiwsir'
print(locals())
foo(221,'qiwsir.github.io')
x=1
y=2
z=3
print(globals())
>>>
{'name': 'qiwsir', 'num': 221, 'str': 'qiwsir.github.io'}
{'y': 2, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'foo': <function foo at 0x0000000003345B70>, '__file__': 'C:\\Users\\wcw\\Desktop\\Testing.py', 'x': 1, 'z': 3, '__package__': None, '__doc__': None}
"""
所谓'命名空间'---作用域的抽象,那么作用域是相对于var而言的
所以locals()-globals()的作用就是打印出当前所有的局部/全局变量的值
它们以字典的形式返回
"""
网友评论