全文一览
一、前言
1.1 需求分析
Python 中打印变量名是一个很常见的操作。通常,为了使变量值易于分辨,通常会连带其名称一起打印:
print("x:", x)
但当变量多的时候,这种写法就显得很冗杂!
print("a:", a)
print("b:", b)
print("c:", c)
print("c:", d)
如何在打印值的时候顺带着打印变量名称呢?这听起来很容易,但其实并非轻而易举!
1.2 工具简介
Python 内置的 globals()、locals() 函数返还当前的全局信息、局部信息的字典,其中就含有变量名与变量值的键值对,使用值的比较即可确定变量名。
inspect 是 Python 的内置库,提供了许多有用的函数来获取、检查和操作对象的信息,如 inspect.isclass(obj) 判断对象是否是一个类、inspect.currentframe() 返回当前框架的信息。
二、globals & locals
2.1 全局使用
在全局范围内使用 globas() 和 locals() 具有相同的效果:
a = {
'abc': 123}
b = 456
c = '789'
d = [10, 11, 12]
print('globals:', globals())
print('\nlocals:', locals())
print('\n')
print(globals() == locals())
print(globals() is locals())
它们的结构都是:
{
'__name__': '__main__',
'__doc__': None,
'__package__': None,
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002088A2A4FD0>,
'__spec__': None,
'__annotations__': {
},
'__builtins__': <module 'builtins' (built-in)>,
'__file__': 'D:\\PycharmProjects\\BERT_pytorch_cpu\\speeding\\var_name_demo.py', '__cached__': None