这是因为dir()
返回串列表:
>>> import string
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']
字符串值不赎回;这些不是实际的属性值,它们是名称。
如果你想测试这些名称为string
模块上的属性,你必须使用getattr()
,或使用vars()
function得到strings
命名空间的字典:
>>> getattr(string, 'Formatter')
<class 'string.Formatter'>
>>> callable(getattr(string, 'Formatter'))
True
>>> [name for name in dir(string) if callable(getattr(string, name))]
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', 'capwords']
>>> [name for name, obj in vars(string).items() if callable(obj)]
['capwords', '_ChainMap', '_TemplateMetaclass', 'Template', 'Formatter']
的顺序不同这里因为dictionaries are unordered和dir()
总是对返回值进行排序。对于模块,dir(module)
只需返回sorted(vars(module))
。
如果你想要的可调用的对象本身,而不是名字,只是过滤值vars()
字典:
[obj for obj in vars(string).values() if callable(obj)]
我没有在此处链接,没有,但我没有考虑把它。我的道歉,我确实认为你已经阅读过。再次,评论是短暂的。如果你批评我的帖子,我不会触及评论(最多我会要求另一个mod看他们)。如果他们觉得我太快在这里清理,我会请另一位看看。事情是,如果我*不*清理我自己帖子下方的评论,当我看到它们已经过时时,那么它们可能需要很长时间才会*。我只是在这里自己收拾一下。 –
谢谢,听起来都很合理。不需要另一个mod来看看。我认为这大部分是困扰我的琐事。 –
我更新了问题,这是不好的公式。你有想法吗? –