【问题标题】:Difference between dir(string) and dir(someString) in Python?Python 中 dir(string) 和 dir(someString) 的区别?
【发布时间】:2016-07-31 06:59:45
【问题描述】:

我刚开始学习 python 编程。当我了解是否要列出我编写的所有字符串模块时:

import string
print dir(string)

结果:

['Formatter', 'Template', '_TemplateMetaclass', 'builtins', 'doc', 'file', 'name', 'package', '_float', '_idmap ', '_idmapL'、'_int'、'_long'、'_multimap'、'_re'、'ascii_letters'、 'ascii_lowercase','ascii_uppercase','atof','atof_error','atoi', 'atoi_error','atol','atol_error','大写','capwords', '中心','计数','数字','expandtabs','查找','hexdigits', 'index','index_error','join','joinfields','letters','ljust', 'lower'、'lowercase'、'lstrip'、'maketrans'、'octdigits'、'printable'、 '标点符号','替换','rfind','rindex','rjust','rsplit', 'rstrip','split','splitfields','strip','swapcase','translate', '大写','大写','空白','zfill']

但这是怎么回事:

someString = "someValues"
print dir(someString)

结果:

['添加', '', '包含', 'delattr', '文档', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'getnewargs'、'getslice'、'gt'、'hash'、'init', 'le', 'len', 'lt', 'mod', 'mul', 'ne', 'new'、'reduce'、'reduce_ex'、'repr'、'rmod', 'rmul'、'setattr'、'sizeof'、'str'、 '子类挂钩'、'_formatter_field_name_split'、 “_formatter_parser”、“大写”、“中心”、“计数”、“解码”、 '编码','endswith','expandtabs','查找','格式','索引', 'isalnum','isalpha','isdigit','islower','isspace','istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind','rindex','rjust','rpartition','rsplit','rstrip','split', 'splitlines','startswith','strip','swapcase','title','translate', '上','zfill']

为什么结果不一样?

【问题讨论】:

  • 因为someStringstr 的一个实例,而string 是标准库中的一个模块。
  • 确实,两个完全不同的东西的dir()很可能是不同的。
  • RTFM(阅读精美手册):docs.python.org/3/library/functions.html#dir默认的 dir() 机制对不同类型的对象表现不同”。以下是根据类型显示的项目列表。

标签: python python-2.7


【解决方案1】:

在 Python 控制台中:

>>> import string
>>> type(string)
<type 'module'>

>>> type("someValues")
<type 'str'>

>>> help(dir)

dir([object]) -> 字符串列表

如果在没有参数的情况下调用,则返回当前范围内的名称。 否则,返回按字母顺序排列的名称列表,包括(部分)> 属性 给定对象的属性,以及可从它访问的属性。 如果对象提供了一个名为 dir 的方法,它将被使用;否则 使用默认的 dir() 逻辑并返回:

for a module object: the module's attributes.
for a class object:  its attributes, and recursively the attributes
  of its bases.
for any other object: its attributes, its class's attributes, and
  recursively the attributes of its class's base classes.

因此,dir(string) 返回string 模块的属性,而 dir("someValues") 返回str 类的属性及其实例的属性。要正确区分,请查看Modules, Classes, and Objects

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 2010-11-02
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2012-12-30
    相关资源
    最近更新 更多