Pythonでは、ループ内の値を生成するジェネレータが、そのループの最終値が返される通常の関数として代わりに呼び出される可能性はありますか?私は引数としてフラグを設定して、そのフラグに応じて返すか返すかを選択しました。しかし、関数内にキーワードyieldが存在するだけで、それが自動的にジェネレータに変換され、Pythonはジェネレータにreturn文があると不満を持ちます。Pythonのハイブリッドジェネレータ/ファンクション
ここでは、そのような機能の例:
def function(generator=True):
a = 0
for i in range(10):
a = i
if generator:
yield a
if not generator:
return a
いくつかのケースでは、私はちょうど(例えば、最適化のための残差の関数としてそれを使用。)最終的な結果を必要とするときにいる間、このような機能は私のために有用であろう他のケース私は、各反復後に増分結果が必要です(例えば、ロボットの差動モデルを使用して、新しい新しい速度コマンドでロボットの姿勢を更新するなど)。今のところ私は2つの機能を持っています.1つは歩留まりがあり、もう1つは戻ります。その2つを組み合わせることは可能ですか?
重複して同じ結果を生成することを注意! http://stackoverflow.com/questions/26595895/return-and-yield-in-the-same-function –
ジェネレータ全体を反復処理し、最後の結果を返すラッパーを作成しますか?同じ機能がジェネレータ*と*ノーマルファンクションの両方のように機能することは狂気のようです。その責任を分けたこれを言って、1つの値に対してジェネレータ全体を反復することはさらに賢明なようです。最後の値を直接計算することはできませんか?実際には、これら2つの関数の責任を分割しますか? – deceze
私が知る限り、ロボットからのデータは周期的(65536に達するとゼロでリセット)され、ステップ更新を段階的に計算する必要があるモータエンコーダティックを表すので、それは不可能であるすべて。ラッパーはまだ別の関数なので、融合が可能かどうか疑問に思っていました。そして、狂気は常に悪い言葉ではありません:) – Mehdi