博客
关于我
locals 和 globals
阅读量:791 次
发布时间:2023-02-06

本文共 1944 字,大约阅读时间需要 6 分钟。

Python 中的 locals() 和 globals() 函数

在 Python 中,locals() 和 globals() 是两个非常有用的函数,它们分别用于获取当前作用域和全局变量的命名空间。通过合理使用这两个函数,我们可以更好地理解和管理变量的作用域。

locals() 函数

locals() 函数用于获取当前作用域内所有变量的命名空间。它返回一个字典,键为变量名,值为变量的值。需要注意的是,调用 locals() 函数之前,所有变量都会被包含在返回的结果中。

示例 1

a = 10b = 20res = locals()c = 20print(res)d = 30

在上述代码中,locals() 调用之前,变量 ab 已经被定义并赋值。调用 locals() 后,返回的结果包含了这些变量的值。因此,输出结果为:

{'a': 10, 'b': 20, 'res': {}, 'c': 20, 'd': 30}

示例 2

def func():    f1 = 11    f2 = 12    res = locals()    f3 = 13    print(res)func()

在函数内部,locals() 返回的是函数内部所有变量的命名空间。因此,调用 locals() 前,f1f2 已经被定义并赋值。调用 locals() 后,返回的结果包含了这些变量的值。因此,输出结果为:

{'f1': 11, 'f2': 12, 'f3': 13, '__name__': 'func', '__doc__': None, ...}

globals() 函数

globals() 函数用于获取全局变量的命名空间。它返回的是 Python 解释器的全局命名空间。无论是在函数内部还是函数外部,调用 globals() 都会返回全局变量的命名空间。

示例 1

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}

示例 2

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),我们可以动态创建全局变量 a0a4。调用 func() 后,可以通过 globals() 查看这些变量的值。

示例调用

func()print(a0)print(a1)print(a2)print(a3)print(a4)

在上述代码中,调用 func() 后,a0a4 被动态创建为全局变量。因此,输出结果为:

01234

总结

locals() 和 globals() 是 Python 中非常有用的函数。locals() 用于获取当前作用域内所有变量的命名空间,而 globals() 用于获取全局变量的命名空间。通过合理使用这两个函数,我们可以更好地理解和管理变量的作用域。

转载地址:http://bbufk.baihongyu.com/

你可能感兴趣的文章
Loj 6285. 数列分块入门 9
查看>>
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
查看>>
LOJ#6277. 数列分块入门 1
查看>>
LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】
查看>>
Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
查看>>
Loki部署及使用
查看>>
lol服务器维修时间2018,《英雄联盟》维护到几点结束 2018维护公告介绍
查看>>
Lombok
查看>>
lombok @EqualsAndHashCode 注解的影响
查看>>
Lombok 中 @EqualsAndHashCode注解的使用
查看>>
lombok 的使用讲解
查看>>
Lombok、Hutool等开发利器
查看>>
Lombok中的@Builder注解的使用
查看>>
Lombok天天用,它的原理是什么你知道吗?
查看>>
LomBok常用注解及详细介绍
查看>>
lombok插件jar包的下载和使用
查看>>