2017-07-09 55 views
1

只需閱讀Python文檔,特別是this頁面,就可以瞭解attrgetter和itemgetter。函數中def的用法是什麼?

我很努力地理解在代碼示例中使用defreturn的用法。 不是這些功能的使用。

它看起來像一個lamdba,但我不知道如何解釋它。

編輯


我認爲它只是點擊。 attrgetter就像resolve_attr函數的構造函數一樣?這有點令人困惑,因爲我通常認爲def的代碼介於defreturn之間。返回上的代碼就像一個lambda。爲了增加混淆,arg ojb是傳遞給返回對象的參數。 Arhhhhh .....


我需要知道這個有什麼意義?

這是我指的代碼示例:

def attrgetter(*items): 
    if any(not isinstance(item, str) for item in items): 
     raise TypeError('attribute name must be a string') 
    if len(items) == 1: 
     attr = items[0] 
     def g(obj): #What is this 
      return resolve_attr(obj, attr) 
    else: 
     def g(obj):#And this? 
      return tuple(resolve_attr(obj, attr) for attr in items) 
    return g 

def resolve_attr(obj, attr): 
    for name in attr.split("."): 
     obj = getattr(obj, name) 
    return obj 
+2

查找「高階函數」。這些函數可以將函數作爲參數和/或返回函數。這是一個功能工廠的例子,一個常見的模式。 –

+0

請參閱[這裏](https://en.m.wikipedia.org/wiki/Higher-order_function)。你應該知道的另一個想法是Python有[頭等函數](https://en.m.wikipedia.org/wiki/First-class_function)。這些想法是[函數式編程範式](https://en.m.wikipedia.org/wiki/Functional_programming) –

+0

耶啊,現在閱讀 –

回答

3

def是定義一個函數的關鍵字。

這些只是另一個功能attrgetter()

裏面定義的函數這就是爲什麼你有多個returnattrgetter()

g看起來像lambda因爲attrgetter()直接返回一個函數,而不是結果。

g確實可以被lambda聲明取代。

3

在Python中,函數就像普通對象一樣。你可以傳遞它們,並且(如上面的例子)從其他函數返回它們。

示例函數返回另一個函數作爲其返回值。它通過定義一個函數(即def g(ojb):行)然後簡單地返回它來完成。

您可以這樣做,因爲在Python中 - 函數就像任何其他對象一樣。

相關問題