Python3内置函数汇总

目录

Python3 vars() 函数详解 获取具有__dict__属性对象的所有属性字典

vars()函数的主要作用是获取具有__dict__属性的模块、类、实例或者其他对象的__dict__属性。__dict__主要用于存储对象(可写)属性的字典或者其他映射对象,在没有传递参数时,vars()函数的结果与locals()的结果是一样的,但locals()仅对读取有用。
它是Python的内置函数,在python文件中直接可以使用。

vars

语法

vars([object])

参数

object[可选] - 具有__dict__属性的对象

返回值

对象的__dict__属性的字典类型数据

实例

§ 实例1 - 不传递参数

在不传递参数的时候,var()的结果与locals()一致。

>>> vars()
#{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> locals()
#{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
§ 实例2 - 类实例应用vars()

类的实例化对象是具有__dict__属性的。对它的任何属性赋值都可以被打印出来。

>>> class main:
...     pass
...
>>> o = main()
>>> vars(o)
{}
>>> o.a = 123
>>> vars(o)
{'a': 123}

类本身也是具有__dict__属性的。但是直接读取类的__dict__返回的是它的映射代理。

>>> class main:
...     a = 1
...     b = 2
...     c = 3
...
>>> vars(main)
mappingproxy({'__module__': '__main__', 'a': 1, 'b': 2, 'c': 3, '__dict__': <attribute '__dict__' of 'main' objects>, '__weakref__': <attribute '__weakref__' of 'main' objects>, '__doc__': None})
§ 实例3 - 另类用法(属性合并传递)

这个例子并不常用,但是在当前环境属性特别多的时候,又不想一个一个的赋值或传递,用这个办法也行。
首先声明了类以及类方法run,接收一个字典x,并且打印这个字典中的a、b、c三个属性。
然后在外部声明3个属性,实例化对象,使用vars()打印了一下当前域的属性字典。可以看到里面包含了a、b、c三个属性。
直接把vars()赋值给了类属性x。然后把它传递给了run()方法。 在这个例子中locals()具有相同的效果。

>>> class main:
...     def run(self, x):
...         print(x['a'], x['b'], x['c'])
...
>>> a = 1
>>> b = 2
>>> c = 3
>>> o = main()
>>> vars()
#{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'main': <class '__main__.main'>, 'o': <__main__.main object at 0x0000000001EBFA20>, 'a': 1, 'b': 2, 'c': 3}
>>> o.x = vars()
>>> o.run(o.x)
1 2 3

如果有任何建议或意见,欢迎交流沟通

作者:张恺阳

本文链接:https://www.zky.name/article/70.html

来源:张恺阳博客