請你看看下面的代碼,id是一個python內建函數嗎?
def getCrewListAll(self):
"""
Set to crew list to all available crew
"""
crew = getIdNumbers()
return map(lambda cr: cr.id, crew)
什麼是cr.id
這裏的意思,是id
一個內置Python函數或?
請你看看下面的代碼,id是一個python內建函數嗎?
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
is the name of a builtin function,是的。但是沒有辦法知道它是否在這些對象的引擎下使用,而沒有看到實際的類定義。
作爲一個例子...如果這是一個Django應用程序,模型實例具有id
成員屬性,該屬性爲您提供該記錄的數據庫ID。它是該框架類的設計的一部分。
即使我假設它的一個屬性......對於我們所知道的所有情況,它也可能是一個computed property,它與類似於屬性的方法調用類似。在查看你的例子時,它可能會做更多的邏輯。
最後,由於cr.id
可以是任何東西,甚至有可能是一個方法,該地圖便返回可調用的LIS:cr.id()
@ samy.vilar:我提到了屬性的可能性。但是,就最終用戶如何應用它而言,它不是一個函數調用。它根據屬性的設計在引擎蓋下調用一個函數。 – jdi
對於downvoter:爲什麼downvote? –
@ ms4py:你看不到lambda包裝函數? –
有一個內置的id函數,但可能會或可能不會與此有關,具體取決於該對象的實現,無論哪種方式id這裏是該對象的成員/屬性。
如果你是好奇,看看有什麼成員樣/字段對象有,你可以做dir(crew[0])
假設其重新調諧至少一個,如果它的正確記錄,你也可以做到這一點help(crew[0].id)
關於這個問題,答案是非常不清楚的。在這種情況下顯示'help(id)'只是令人困惑。 – schlamar
是的,我認爲你的權利。 –
通常人們認爲a.id意味着只是獲得那個價值而沒有別的東西,對吧?但是如果它的屬性那麼它不僅僅是得到那個價值,它可能意味着打開一個文件,解析它,更新它並午餐核武器以及你的想法...;) –
我覺得這裏真正的問題是,你不瞭解你發佈的代碼。 在這種情況下,您需要了解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)
做:它返回從每個對象的列表crew
id屬性的列表。
問題是這段代碼其實不太好。你可以寫一個list comprehension相同的功能,這是更爲直觀:
def getCrewListAll(self):
return [cr.id for cr in getIdNumbers()]
如果他不知道地圖你認爲他知道列表理解的? –
不,但鏈接的教程非常好,特別是對於這個話題。如果OP在SO上提出問題,他應該有學習新內容的動力。 – schlamar
+1,因爲他應該有學習新東西的動力。 –
有一個名爲「內置函數」在Python文檔的頁面:http://docs.python.org/library/functions .html#id – derekerdmann
這是特定於你從這個代碼獲得的任何庫。 – jdi
您是否檢查過 - 或者您能夠檢查 - 定義了getIdNumbers()的代碼? –