请解释一下这个python“for”语句:methodList = [dir(object)中方法的方法,如果可调用(getattr(object,method))]

时间:2011-03-03 07:39:36

标签: python list

我正在尝试使用内省来获取我的对象函数列表。我一直在阅读“潜入Python”,以及上述声明:

methodList = [method for method in dir(object) if callable(getattr(object, method))]

诀窍。问题是,我不知道它在做什么。对我来说,它似乎是一个极端简写,用于循环,测试和向列表中添加元素。如果我是对的,陈述的哪一部分做了什么?!

换句话说,有人可以将其翻译成英文。

4 个答案:

答案 0 :(得分:3)

另一种看待这个的方法:

methodList = []
for method in dir(object):  # for every attribute in object
                            # note that methods are considered attributes
    if callable(getattr(object, method)) # is it callable?
        methodList.append(method)
return methodList

构造本身是一个带过滤器的列表理解。

请参阅:dir()callable()getattr()list comprehensions

答案 1 :(得分:3)

这是Python中列表推导的一个例子。

[f(y) for y in z]

表示为列表z中的每个元素y创建元素列表f(y)。您可以添加可选的filte rexpression give

[f(y) for y in z if g(y)]

表示为z中元素y的所有元素f(y)列表,其中g(y)为真。

翻译,这给出了

[method for method in dir(object) if callable(getattr(object,method)]

表示在dir(object)中列出所有元素“method”,其中getattr(object,method)是可调用的。

答案 2 :(得分:2)

这是一个列表理解,相当于:

methodList = []
for method in dir(object):
  if(callable(getattr(object,method))):
     methodList.append(method)

答案 3 :(得分:2)

以下是您的陈述,以便于理解:

methodList = [method
              for method in dir(object)
              if callable(getattr(object, method))]

表示:

  1. method中的每个method(请注意object此处为变量名称),
  2. 如果method可以调用(即实际方法),
  3. 然后将method放入列表
  4. 如果您熟悉SQL,括号中的部分(称为“列表理解”)大致相当于:

    SELECT method
    FROM dir(object)
    WHERE callable(getattr(object, method))