9

ほとんどの関数は簡単に名前を付けることができます。通常、関数名は、その機能または生成される結果のタイプに基づいています。

ただし、ジェネレーター関数の場合、結果は他の型の iterable になる可能性があります。

def sometype( iterable ):
    for x in iterable:
        yield some_transformation( x )

関数は名前付きのsometype型のオブジェクトを返さないため、名前は誤解を招くように感じます。それは本当に iterable oversometypeです。

ハンガリー語表記法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_プレフィックスは、ジェネレーター関数の名前を明確にするのに役立ちますか? それともただの視覚的な混乱ですか?

接頭辞が役立つ場合、どのような接頭辞の提案がありますか?

または、サフィックスが役立つ場合、どのようなサフィックスの提案がありますか?

4

1 に答える 1

7

Pythondictsにはiter*メソッドがあります。また、lxml ツリーにもiterメソッドがあります。読む

for node in doc.iter():

sometypes_iter おなじみのように思えるので、そのパターンに従って、同じように書くことができるように、いくつかのタイプのジェネレーターに名前を付けることを検討します。

for item in sometypes_iter():

Python はsorted関数を提供します。そのパターンに従って、私は動詞機能を過去時制にするかもしれません:

sometypes_reduced
sometypes_mapped
sometypes_filtered

これらの関数が十分にある場合は、メソッド名を、、およびSomeTypesに短縮できるようにクラスを作成するのが理にかなっています。reducemapfilter

関数が 以外の型を受け入れたり返したりするように一般化できる場合、sometypeもちろん、関数名から削除sometypeし、代わりに型よりも機能を強調する名前を選択することが理にかなっています。

于 2010-11-18T15:12:54.157 に答える