只需閱讀Python文檔,特別是this頁面,就可以瞭解attrgetter和itemgetter。函數中def的用法是什麼?
我很努力地理解在代碼示例中使用def
和return
的用法。 不是這些功能的使用。
它看起來像一個lamdba
,但我不知道如何解釋它。
編輯
我認爲它只是點擊。 attrgetter就像resolve_attr函數的構造函數一樣?這有點令人困惑,因爲我通常認爲def的代碼介於def
和return
之間。返回上的代碼就像一個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
查找「高階函數」。這些函數可以將函數作爲參數和/或返回函數。這是一個功能工廠的例子,一個常見的模式。 –
請參閱[這裏](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) –
耶啊,現在閱讀 –