Pythonドキュメントの特にthisページを読み、attrgetterとitemgetterに関してです。関数内のdefの使い方は何ですか?
def
とreturn
という使用法の使用法をコード例で理解するのは苦労しています。 これらの機能の使用はではありません。
lamdba
のようですが、それをどのように解釈するのか分かりません。
EDIT
私はそれだけでクリックされたと思います。 attrgetterはresolve_attr関数のコンストラクタのようなものですか?私は通常、defのコードがdef
とreturn
の間であると予想していたので、これはちょっと混乱しました。リターンのコードはラムダのようなものです。混乱に加えて、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)に共通しています –
ええ、今読んでいる –