Pythonのジェネレータ関数名 - 接頭辞は参考になりましたか? [閉まっている]
-
26-09-2019 - |
質問
ほとんどの関数は、名前に簡単です。一般的に、関数名はそれがないか、結果の型は、それが生成するものに基づいています。
発電機機能の場合、しかし、結果は、いくつかの他のタイプにわたって反復可能であってもよい。
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
sometype
名は、関数が名前付きの型のオブジェクトを返していないため、誤解を招く感じています。それは実際に反復可能なオーバーsometype
です。
iter_sometype
またはgen_sometype
などの名前があまりハンガリアン記法のようなビットを感じています。しかし、また、機能の意図を明確にするようです。
さらに行く、接頭辞が役に立つかもしれませんより多くの専門例の数があります。
これらは、 itertools のに利用可能であるいくつかの典型的な例です。しかし、私たちはしばしばのは、それを作るいくつかのアルゴリズムの複雑さを持っていることのバージョンを記述する必要があります
itertools
に似てではなく、ぴったります。
def reduce_sometype( iterable ):
summary = sometype()
for x in iterable:
if some_rule(x):
yield summary
summary= sometype()
summary.update( x )
def map_sometype( iterable ):
for x in iterable:
yield some_complex_mapping( x )
def filter_sometype( iterable ):
for x in iterable:
if some_complex_rule(x):
yield x
iter_
、map_
、reduce_
、filter_
プレフィックスヘルプがジェネレータ関数の名前を明らかにしていますか?それともそれは単なる視覚的な混乱のですか?
プレフィックスが役に立つ場合は、どのような接頭辞の提案をお持ちですか?
サフィックスが役に立つ場合は、あるいは、どのようなサフィックスの提案をお持ちですか?
解決
Pythonのdicts
iter*
メソッドを持っています。そしてlxmlの木々もiter
メソッドを持っています。
読み込み
for node in doc.iter():
ので、お馴染みのようです
そのパターンを次のように、私はsometypes sometypes_iter
の発電機を命名検討したいです
私はanalgously書くことができると、
for item in sometypes_iter():
Pythonはsorted
機能を提供します。
そのパターンに続いて、私は動詞の機能を作るかもしれない過去形:
sometypes_reduced
sometypes_mapped
sometypes_filtered
あなたは、これらの機能を十分に持っている場合、それはメソッド名がSomeTypes
、reduce
、およびmap
に短縮することができるようfilter
クラスを作成しても意味があります。
の機能は、もちろん、それは関数名からsometype
を削除し、代わりにそれはかなりの種類よりも、何を重視する名前を選択することが理にかなって、sometype
以外の型を受け入れるか、または復帰するために一般化することができます。