(十一)全局和局部var

2019-02-15  本文已影响0人  费云帆
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

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()的作用就是打印出当前所有的局部/全局变量的值
它们以字典的形式返回

"""

上一篇 下一篇

猜你喜欢

热点阅读