id是python内置函数吗?

时间:2012-06-15 05:35:33

标签: python function built-in

请看下面的代码,

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 个答案:

答案 0 :(得分:6)

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

id is the name of a builtin function,是的。但是没有办法知道它是否在这些对象的引擎盖下使用而没有看到实际的类定义。

作为示例......如果这是一个django应用程序,模型实例具有id成员属性,可以为您提供该记录的数据库ID。它是该框架类的设计的一部分。

即使我假设它的属性...对于所有我们知道它也可以是computed property,它类似于作为属性的方法调用。在查看你的例子时,它可能会做更多的逻辑。

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

答案 1 :(得分:4)

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

id(cr)将调用该内置函数并返回cr的身份。

答案 2 :(得分: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)正在做什么:它返回列表crew中每个对象的id属性列表。

问题是这段代码实际上并不是很好。您可以使用list comprehension编写相同的函数,这更加直观:

def getCrewListAll(self):
    return [cr.id for cr in getIdNumbers()]

答案 3 :(得分:1)

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

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