我在Python解释器中运行以下命令:
some_list = []
methodList = [method for method in dir(some_list) if (callable(getattr(some_list, method)) and (not method.find('_')))]
我想要的是获取特定对象的所有方法名称列表,除了以下划线命名的方法,即__sizeof__
这就是为什么我将if语句嵌套在上面的代码中:
if (callable(getattr(some_list, method)) and (not method.find('_')))
但methodList
的内容是:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__']
确实,与我期待的完全相反。
如果not method.find('_')
字符串无法包含字符串method
,那么'_'
只会返回true吗?
答案 0 :(得分:6)
请参阅str.find
的文档。
返回找到substring sub的字符串中的最低索引,这样sub包含在切片s [start:end]中。可选参数start和end被解释为切片表示法。如果未找到sub,则返回-1。
如果未找到下划线,则表达式method.find('_')
返回-1,如果以下划线开头,则返回0。应用not
意味着只有以下划线开头的方法才能提供True
(因为not 0
是True
)。
改为使用'_' not in method
。