我正在尝试使用内省来获取我的对象函数列表。我一直在阅读“潜入Python”,以及上述声明:
methodList = [method for method in dir(object) if callable(getattr(object, method))]
诀窍。问题是,我不知道它在做什么。对我来说,它似乎是一个极端简写,用于循环,测试和向列表中添加元素。如果我是对的,陈述的哪一部分做了什么?!
换句话说,有人可以将其翻译成英文。
答案 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
构造本身是一个带过滤器的列表理解。
答案 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))]
表示:
method
中的每个method
(请注意object
此处为变量名称),method
可以调用(即实际方法),method
放入列表如果您熟悉SQL,括号中的部分(称为“列表理解”)大致相当于:
SELECT method
FROM dir(object)
WHERE callable(getattr(object, method))