2

请看下面的代码,

def getCrewListAll(self):
    """
    Set to crew list to all available crew
    """
    crew = getIdNumbers()
    return map(lambda cr: cr.id, crew)

这里是什么意思cr.id,是id内置的python函数还是?

4

4 回答 4

6

在您的示例中,对的引用cr.id不是函数调用。它访问变量的成员属性,该属性是任何对象cr的占位符。crew

id 是内置函数的名称,是的。但是如果不查看实际的类定义,就无法知道它是否在这些对象的底层使用。

举个例子……如果这是一个 django 应用程序,模型实例的id成员属性会为您提供该记录的数据库 ID。它是该框架的类设计的一部分。

尽管我假设它是一个属性......据我们所知,它也可能是一个计算属性,类似于一个类似于属性的方法调用。在查看您的示例时,它可能会执行更多逻辑。

最后,因为它cr.id可以是任何东西,它甚至可以是一个方法,并且映射返回一个可调用的列表:cr.id()

于 2012-06-15T05:58:17.620 回答
4

cr.id不是内置函数(除非您已将其指定为...),它是cr那里对象的普通成员。

id(cr)将是对该内置函数的调用,并将返回cr.

于 2012-06-15T05:41:49.387 回答
2

我认为这里真正的问题是您不理解您发布的代码。在这种情况下,您需要了解maplambda

map是将函数应用于列表的每个元素并将其作为列表返回的函数:

>>> def func(a):
...   return a * 2
...
>>> map(func, [1,2,3])
[2, 4, 6]

lambda可以看作是创建函数的捷径。上面可以写成lambda

>>> func = lambda a: a * 2
>>> map(func, [1,2,3])
[2, 4, 6]

那么您的代码map(lambda cr: cr.id, crew)在做什么:它从 list 中的每个对象返回一个 id 属性列表crew

问题是这段代码实际上不是很好。您可以使用更直观的列表推导编写相同的函数:

def getCrewListAll(self):
    return [cr.id for cr in getIdNumbers()]
于 2012-06-15T06:48:33.030 回答
1

有一个内置的 id 函数,但可能与此相关,也可能不相关,具体取决于该对象的实现,无论哪种方式 id 都是该对象的成员/属性。

如果您想知道该对象有哪些类型的成员/字段,您可以dir(crew[0])假设它至少重新调整一个,并且如果它的文档正确,您也可以这样做help(crew[0].id)

于 2012-06-15T05:38:31.653 回答