请看下面的代码,
def getCrewListAll(self):
"""
Set to crew list to all available crew
"""
crew = getIdNumbers()
return map(lambda cr: cr.id, crew)
这里是什么意思cr.id
,是id
内置的python函数还是?
在您的示例中,对的引用cr.id
不是函数调用。它访问变量的成员属性,该属性是任何对象cr
的占位符。crew
id
是内置函数的名称,是的。但是如果不查看实际的类定义,就无法知道它是否在这些对象的底层使用。
举个例子……如果这是一个 django 应用程序,模型实例的id
成员属性会为您提供该记录的数据库 ID。它是该框架的类设计的一部分。
尽管我假设它是一个属性......据我们所知,它也可能是一个计算属性,类似于一个类似于属性的方法调用。在查看您的示例时,它可能会执行更多逻辑。
最后,因为它cr.id
可以是任何东西,它甚至可以是一个方法,并且映射返回一个可调用的列表:cr.id()
cr.id
不是内置函数(除非您已将其指定为...),它是cr
那里对象的普通成员。
id(cr)
将是对该内置函数的调用,并将返回cr
.
我认为这里真正的问题是您不理解您发布的代码。在这种情况下,您需要了解map
和lambda
。
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()]
有一个内置的 id 函数,但可能与此相关,也可能不相关,具体取决于该对象的实现,无论哪种方式 id 都是该对象的成员/属性。
如果您想知道该对象有哪些类型的成员/字段,您可以dir(crew[0])
假设它至少重新调整一个,并且如果它的文档正确,您也可以这样做help(crew[0].id)