2

我在 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('_')只返回 true吗?method'_'

4

1 回答 1

6

请参阅str.find.

返回找到子字符串 sub 的字符串中的最低索引,使得 sub 包含在切片 s[start:end] 中。可选参数 start 和 end 被解释为切片表示法。如果未找到 sub,则返回 -1。

如果未找到下划线,则表达式method.find('_')返回 -1,如果以下划线开头,则返回 0。应用not意味着只有以下划线开头的方法才会给出True(因为not 0is True)。

改为使用'_' not in method

于 2012-04-19T23:12:34.263 回答