Python vars()
时间:2020-02-23 14:43:40 来源:igfitidea点击:
Python vars()函数为模块,类,实例或者具有__dict__属性的任何其他对象返回__dict__属性。
因此,vars()函数的输出为字典。
Python vars()
Python vars()函数语法为:
vars([object])
如果未提供任何参数,则vars()的作用类似于locals()函数。
参数可以是模块,类或者类的实例。
如果指定的参数不具有__dict__属性,则会抛出TypeError异常并显示消息TypeError:vars()参数必须具有__dict__属性。
如果我们更新对象__dict__字典值,那么更新后的值将由vars()函数返回。
类和对象的vars()
假设我们定义了一个包含一些类变量和实例变量的类。
class Data: # class variables id = 0 name = '' def __init__(self, i, n): self.id = i self.name = n # instance variable self.repr = 'Data[%s,%s]' % (i,n)
让我们看一下提供类实例时的vars()函数输出。
d = Data(1, 'hyman') # vars of object print(vars(d)) # update __dict__ and then call vars() d.__dict__['id'] = 100 print(vars(d))
输出:
{'id': 1, 'name': 'hyman', 'repr': 'Data[1,hyman]'} {'id': 100, 'name': 'hyman', 'repr': 'Data[1,hyman]'}
让我们看看以类作为参数的vars()函数输出。
print(vars(Data))
输出:
{'__module__': '__main__', 'id': 0, 'name': '', '__init__': <function Data.__init__ at 0x108566158>, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>, '__doc__': None}
带有模块的vars()
import math print(vars(math))
输出:
{'__name__': 'math', '__doc__': 'This module is always available. It provides access to the\nmathematical functions defined by the C standard.', '__package__': '', '__loader__': <_frozen_importlib_external.ExtensionFileLoader object at 0x1085654a8>, '__spec__': ModuleSpec(name='math', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0x1085654a8>, origin='/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/math.cpython-37m-darwin.so'), 'acos': <built-in function acos>, 'acosh': <built-in function acosh>, 'asin': <built-in function asin>, 'asinh': <built-in function asinh>, 'atan': <built-in function atan>, 'atan2': <built-in function atan2>, 'atanh': <built-in function atanh>, 'ceil': <built-in function ceil>, 'copysign': <built-in function copysign>, 'cos': <built-in function cos>, 'cosh': <built-in function cosh>, 'degrees': <built-in function degrees>, 'erf': <built-in function erf>, 'erfc': <built-in function erfc>, 'exp': <built-in function exp>, 'expm1': <built-in function expm1>, 'fabs': <built-in function fabs>, 'factorial': <built-in function factorial>, 'floor': <built-in function floor>, 'fmod': <built-in function fmod>, 'frexp': <built-in function frexp>, 'fsum': <built-in function fsum>, 'gamma': <built-in function gamma>, 'gcd': <built-in function gcd>, 'hypot': <built-in function hypot>, 'isclose': <built-in function isclose>, 'isfinite': <built-in function isfinite>, 'isinf': <built-in function isinf>, 'isnan': <built-in function isnan>, 'ldexp': <built-in function ldexp>, 'lgamma': <built-in function lgamma>, 'log': <built-in function log>, 'log1p': <built-in function log1p>, 'log10': <built-in function log10>, 'log2': <built-in function log2>, 'modf': <built-in function modf>, 'pow': <built-in function pow>, 'radians': <built-in function radians>, 'remainder': <built-in function remainder>, 'sin': <built-in function sin>, 'sinh': <built-in function sinh>, 'sqrt': <built-in function sqrt>, 'tan': <built-in function tan>, 'tanh': <built-in function tanh>, 'trunc': <built-in function trunc>, 'pi': 3.141592653589793, 'e': 2.718281828459045, 'tau': 6.283185307179586, 'inf': inf, 'nan': nan, '__file__': '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/math.cpython-37m-darwin.so'}
vars()不带参数
print(vars())
输出:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x108508390>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/hyman/Documents/github/theitroad/Python-3/basic_examples/python_vars_function.py', '__cached__': None, 'Data': <class '__main__.Data'>, 'd': <__main__.Data object at 0x108565048>, 'math': <module 'math' from '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/math.cpython-37m-darwin.so'>}