python的locals()用法实例,返回当前作用域对象名称
当在python的编程实战开发当中,很可能就会因为搞混了某个对象或变量的作用域,继而引发对象undefined的提示。python内置了一个locals()函数,可以用来查询当前作用域中的对象或变量,并以字典键值对的形式返回变量的名称和值。
python的locals()的语法结构
locals() -> dict[str, Any];
- locals()函数没有参数;
- “->”符号指定返回值类型为dict字典型数据;
locals()函数实例代码
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> a,b=1,2
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2}
>>> def _sum1():
... c=1
... return c
...
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 2, '_sum1': <function _sum1 at 0x10dxxxef0>}
>>> def _sum2():
... c=1
... print(locals())
...
>>> _sum2()
{'c': 1}
代码解析
如上代码,可分为上个部分来阅读:
- 当声明了变量a和b之后,调用locals函数,可以发现,dict字典类型的返回值的后面多了两个键值对的值'a':1和'b':2,说明二者在locals()调用的当前作用于之中;
- 在_sum1()函数之中,又声明了一个c变量,可在函数外调用locals()函数时,返回值中只多了一个以函数名为键,并以函数名的存地址为值的dict元素,并没有函数内的变量c,说明变量c的作用域并不在函数外;
- 在_sum2()函数之中,声明变量c的同时,调用了locals()函数,并用print()直接输出,得到的是一个{'c': 1},因为这是函数_sum2()作用域内的对象或变量;