本文共 1944 字,大约阅读时间需要 6 分钟。
在 Python 中,locals() 和 globals() 是两个非常有用的函数,它们分别用于获取当前作用域和全局变量的命名空间。通过合理使用这两个函数,我们可以更好地理解和管理变量的作用域。
locals() 函数用于获取当前作用域内所有变量的命名空间。它返回一个字典,键为变量名,值为变量的值。需要注意的是,调用 locals() 函数之前,所有变量都会被包含在返回的结果中。
a = 10b = 20res = locals()c = 20print(res)d = 30
在上述代码中,locals()
调用之前,变量 a
和 b
已经被定义并赋值。调用 locals()
后,返回的结果包含了这些变量的值。因此,输出结果为:
{'a': 10, 'b': 20, 'res': {}, 'c': 20, 'd': 30}
def func(): f1 = 11 f2 = 12 res = locals() f3 = 13 print(res)func()
在函数内部,locals()
返回的是函数内部所有变量的命名空间。因此,调用 locals()
前,f1
和 f2
已经被定义并赋值。调用 locals()
后,返回的结果包含了这些变量的值。因此,输出结果为:
{'f1': 11, 'f2': 12, 'f3': 13, '__name__': 'func', '__doc__': None, ...}
globals() 函数用于获取全局变量的命名空间。它返回的是 Python 解释器的全局命名空间。无论是在函数内部还是函数外部,调用 globals() 都会返回全局变量的命名空间。
a = 5b = 15res = globals()c = 26print(res)d = 27
在上述代码中,globals()
返回的是全局变量的命名空间。因此,输出结果为:
{'__name__': '__main__', '__doc__': None, '__package__': None, ... 'a': 5, 'b': 15, 'res': {}, 'c': 26, 'd': 27}
z1 = 5z2 = 6def func(): f1 = 1 f2 = 2 f3 = 3 res = globals() f4 = 6 print(res)z4 = 8func()
在上述代码中,globals()
返回的是全局变量的命名空间。因此,输出结果为:
{'__name__': '__main__', '__doc__': None, '__package__': None, ... 'z1': 5, 'z2': 6, 'res': {}, 'f1': 1, 'f2': 2, 'f3': 3, 'f4': 6, 'z4': 8}
globals() 函数返回的是全局命名空间的字典,可以通过修改这个字典来动态创建全局变量。
dic = globals()dic['wangwen'] = 188print(wangwen)
在上述代码中,globals()
返回全局命名空间的字典。通过访问 dic['wangwen']
并赋值为 188,我们可以动态创建全局变量 wangwen
。因此,输出结果为:
wangwen
def func(): res = globals() # 动态创建全局变量 for i in range(5): res["a%d" % (i)] = i
在上述代码中,globals()
返回全局命名空间的字典。通过循环迭代 range(5)
,我们可以动态创建全局变量 a0
到 a4
。调用 func()
后,可以通过 globals()
查看这些变量的值。
func()print(a0)print(a1)print(a2)print(a3)print(a4)
在上述代码中,调用 func()
后,a0
到 a4
被动态创建为全局变量。因此,输出结果为:
01234
locals() 和 globals() 是 Python 中非常有用的函数。locals() 用于获取当前作用域内所有变量的命名空间,而 globals() 用于获取全局变量的命名空间。通过合理使用这两个函数,我们可以更好地理解和管理变量的作用域。
转载地址:http://bbufk.baihongyu.com/