首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请解释这个python " for“语句: methodList = [method for method in dir(object) if callable(getattr(object,method))]

请解释这个python " for“语句: methodList = [method for method in dir(object) if callable(getattr(object,method))]
EN

Stack Overflow用户
提问于 2011-03-03 15:39:36
回答 4查看 253关注 0票数 3

我正在尝试使用内省来获取我的对象函数的列表。我一直在读“潜入Python",上面提到的这句话:

代码语言:javascript
运行
复制
methodList = [method for method in dir(object) if callable(getattr(object, method))]

真的很管用。问题是,我不知道它在做什么。对我来说,它看起来像是循环、测试和向列表中添加元素的极端简写。如果我是正确的,那么语句的哪一部分做了什么?!

换句话说,有人能把它翻译成英语吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-03 15:42:55

另一种看待这个问题的方式:

代码语言:javascript
运行
复制
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

票数 3
EN

Stack Overflow用户

发布于 2011-03-03 15:43:00

这是Python中列表解释的一个例子。

代码语言:javascript
运行
复制
[f(y) for y in z]

表示为列表z中的每个元素y创建一个元素列表f(y)。您可以添加一个可选的过滤表达式,给出

代码语言:javascript
运行
复制
[f(y) for y in z if g(y)]

这意味着为z中的元素y创建所有元素f(y)的列表,其中g(y)为true。

翻译过来,这给出了

代码语言:javascript
运行
复制
[method for method in dir(object) if callable(getattr(object,method)]

意思是在可调用getattr(object,method)的dir(object)中创建所有元素"method“的列表。

票数 3
EN

Stack Overflow用户

发布于 2011-03-03 15:42:28

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

代码语言:javascript
运行
复制
methodList = []
for method in dir(object):
  if(callable(getattr(object,method))):
     methodList.append(method)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5177919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档