ほとんどの機能は名前を付けるのが簡単です。一般に、関数名は、それが何をするか、それが生成する結果のタイプに基づいています。Python Generatorの関数名 - 接頭辞は参考になりますか?
ただし、ジェネレータ関数の場合、結果は他の型よりも繰り返し可能です。関数は、名前付きの型のオブジェクトを返しませんので、
def sometype(iterable):
for x in iterable:
yield some_transformation(x)
sometype
名は、誤解を招きやすい感じ。実際にはsometype
以上の繰り返しです。
iter_sometype
またはgen_sometype
などの名前があまりHungarian Notationのようなビットを感じています。しかし、それはまた、機能の意図を明らかにしているようです。
さらに詳しくは、接頭辞が役立つような、もっと特殊なケースがいくつかあります。 これは典型的な例であり、その一部は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_
プレフィックスはジェネレータ関数の名前を明確に役立ちますか?それとも、それはちょうど視覚的な混乱ですか?
プレフィックスが有用な場合は、プレフィックスの候補を教えてください。
また、接尾辞が有用な場合は、どのような接尾辞候補がありますか?
私はあなたが一般化されたもののようなものだと思います。つまり、ほとんどの場合、第2および第3の関数をジェネレータ式ala '(iterableのxのsome_mapping(x))として直接書くだけです。最初のものは実際には何も 'reduce 'しません。マップのように、各' x'に新しい 'sometype'があるためです。 –
@ THC4k:もっと複雑であると想像してください。'itertools'の中に簡単に入れるのは複雑すぎます。あまり複雑ではないので、基本的な関数型プログラミングの原則に違反します。たとえば、最適化として多くの予備セットアップが必要になる場合があります。 –