专栏首页python前行者[888]python内置函数vars()|dir()|locals()

[888]python内置函数vars()|dir()|locals()

dir()和vars()的区别

dir()只打印属性(属性,属性…)

而vars()则打印属性与属性的值(属性:属性值…),不带参数功能和locals()函数一样

>> a='aaaaaaaaaaaaa'
>> class b:
>>     c = 'cccc'

>> dir()
>>['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b']    

>> vars()
>> {'a': 'aaaaaaaaaaaaa', 'b': , '__builtins__': , '__file__': 'C:\\Users\\CS11\\Desktop\\test.py', '__package__': None, '__name__': '__main__', '__doc__': None} 
>> dir(b)  
>>['__doc__', '__module__', 'c']
   
>> vars(b)
>>{'__module__': '__main__', 'c': 'cccc', '__doc__': None}

vars() 函数

vars() 函数返回对象object的属性和属性值的字典对象,如果没有参数,就打印当前调用位置的属性和属性值 类似 locals()。

当函数接收一个参数时,参数可以是模块、类、类实例,或者定义了__dict__属性的对象。

>>>print(vars())
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> class Runoob:
...     a = 1
... 
>>> print(vars(Runoob))
{'a': 1, '__module__': '__main__', '__doc__': None}
>>> runoob = Runoob()
>>> print(vars(runoob))
{}
------------------------------------------------------------------------------
#作用于模块
>>> import time
>>> vars(time)
{'gmtime': <built-in function gmtime>, 'tzname': ('Öйú±ê׼ʱ¼ä', 'ÖйúÏÄÁîʱ'), 'timezone': -28800, 'struct_time': <class 'time.struct_time'>, 'ctime': <built-in function ctime>, 'perf_counter': <built-in function perf_counter>, 'mktime': <built-in function mktime>, 'localtime': <built-in function localtime>, 'time': <built-in function time>, '__package__': '', 'altzone': -32400, 'clock': <built-in function clock>, 'strptime': <built-in function strptime>, 'monotonic': <built-in function monotonic>, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, 'get_clock_info': <built-in function get_clock_info>, 'sleep': <built-in function sleep>, 'process_time': <built-in function process_time>, '__name__': 'time', '_STRUCT_TM_ITEMS': 9, '__spec__': ModuleSpec(name='time', loader=<class '_frozen_importlib.BuiltinImporter'>, origin='built-in'), '__doc__': 'This module provides various functions to manipulate time values.\n\nThere are two standard representations of time. One is the number\nof seconds since the Epoch, in UTC (a.k.a. GMT). It may be an integer\nor a floating point number (to represent fractions of seconds).\nThe Epoch is system-defined; on Unix, it is generally January 1st, 1970.\nThe actual value can be retrieved by calling gmtime(0).\n\nThe other representation is a tuple of 9 integers giving local time.\nThe tuple items are:\n year (including century, e.g. 1998)\n month (1-12)\n day (1-31)\n hours (0-23)\n minutes (0-59)\n seconds (0-59)\n weekday (0-6, Monday is 0)\n Julian day (day in the year, 1-366)\n DST (Daylight Savings Time) flag (-1, 0 or 1)\nIf the DST flag is 0, the time is given in the regular time zone;\nif it is 1, the time is given in the DST time zone;\nif it is -1, mktime() should guess based on the date and time.\n\nVariables:\n\ntimezone -- difference in seconds between UTC and local standard time\naltzone -- difference in seconds between UTC and local DST time\ndaylight -- whether local time should reflect DST\ntzname -- tuple of (standard time zone name, DST time zone name)\n\nFunctions:\n\ntime() -- return current time in seconds since the Epoch as a float\nclock() -- return CPU time since process start as a float\nsleep() -- delay for a number of seconds given as a float\ngmtime() -- convert seconds since Epoch to UTC tuple\nlocaltime() -- convert seconds since Epoch to local time tuple\nasctime() -- convert time tuple to string\nctime() -- convert time in seconds to string\nmktime() -- convert local time tuple to seconds since Epoch\nstrftime() -- convert time tuple to string according to format specification\nstrptime() -- parse string to time tuple according to format specification\ntzset() -- change the local timezone', 'strftime': <built-in function strftime>, 'asctime': <built-in function asctime>, 'daylight': 0}
 
#作用于类
>>> vars(slice)
mappingproxy({'__ne__': <slot wrapper '__ne__' of 'slice' objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'slice' objects>, '__reduce__': <method '__reduce__' of 'slice' objects>, 'start': <member 'start' of 'slice' objects>, 'indices': <method 'indices' of 'slice' objects>, '__ge__': <slot wrapper '__ge__' of 'slice' objects>, 'stop': <member 'stop' of 'slice' objects>, '__eq__': <slot wrapper '__eq__' of 'slice' objects>, 'step': <member 'step' of 'slice' objects>, '__hash__': None, '__doc__': 'slice(stop)\nslice(start, stop[, step])\n\nCreate a slice object. This is used for extended slicing (e.g. a[0:10:2]).', '__repr__': <slot wrapper '__repr__' of 'slice' objects>, '__le__': <slot wrapper '__le__' of 'slice' objects>, '__gt__': <slot wrapper '__gt__' of 'slice' objects>, '__new__': <built-in method __new__ of type object at 0x6A91B420>, '__lt__': <slot wrapper '__lt__' of 'slice' objects>})
 
#作用于类实例
>>> class A(object):
  pass
 
>>> a.__dict__
{}
>>> vars(a)
{}
>>> a.name = 'Kim'
>>> a.__dict__
{'name': 'Kim'}
>>> vars(a)
{'name': 'Kim'}

对于 x = 1,这样的一个赋值语句,我们在执行后,名称 x 引用到值 1。这就像字典一样,键引用值,当然,变量和所对应的值用的是个"不可见"的字典。我们可以使用 vars 函数来返回这个字典:

>>> x = 1
>>> scope = vars()
>>> scope["x"]
1

参考:https://www.runoob.com/python/python-func-vars.html https://www.cnblogs.com/leisurelylicht/p/Python-dir-hevars-de-qu-bie.html https://www.jb51.net/article/129698.htm

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [爬虫]爬虫时碰到的IOError: [Errno ftp error] [Errno 10060]错误的原因以及解决方法

    原因是爬取页面过快造成暂时被网站ban掉的情况,设置time.sleep(1)就好,后来发现ban的时间不定,就自己动手写了个暴力的做法

    周小董
  • python functools.wraps装饰器模块

    D:\Python27\python.exe D:/Python/functools_study/完整的装饰器.py 这是不带参数的装饰器,开始执行 3...

    周小董
  • python 写日志

    输出: 标准输出(屏幕)未显示任何信息,发现当前工作目录下生成了logger.log,内容如下:

    周小董
  • 【快报】谷歌自动驾驶部门或独立 | 机器学习算法识别抑郁症

    新智元 AI DAILY 1 科学家用机器学习算法识别抑郁症 ? 美国南加州大学的研究员发明了一种机器学习算法,能够从抑郁症患者中检测出某种语言相关的诊...

    新智元
  • 日差检定仪的详细概述

    人类对时间频率特别是对时间的认知和研究历史久远,时间与历法是天文学中最早发展起来的一个分支,在其发展历程中,又与自然科学中的数学,物理学,测地学以及航海、机械制...

    时频专家
  • WPF 添加窗口消息钩子方法

    窗口消息钩子需要先拿到窗口指针然后需要在窗口初始化完成之后才可以做到,推荐的做法请看代码

    林德熙
  • php中的generator和yield

    1.Generator 在编程这个领域,我们可以把它想象成一个可以生成一系列数据的工具,这个工具可以具体为一个类、一个函数或者是一个语句 定义: http://...

    苦咖啡
  • 训练集(Training dataset)

    在机器学习中,一般将样本分成独立的三部分训练集(train set),验证集(validation set)和测试集(test set)。其中,训练集用于建立模...

    easyAI
  • 新手指南:DVWA-1.9全级别教程之SQL Injection

    目前,最新的DVWA已经更新到1.9版本(点击原文查看链接),而网上的教程大多停留在旧版本,且没有针对DVWA high级别的教程,因此萌发了一个撰写新手教程的...

    FB客服
  • 在Python中什么时候用Yield什么时候用Return

    许多Python开发人员在代码中使用yield,而不考虑他们是否真的需要。这篇文章解释了你什么时候应该使用它。

    大数据弄潮儿

扫码关注云+社区

领取腾讯云代金券