2

yield ステートメントをジェネレーター式に変換することについて質問があります

したがって、関数と開始番号を入力として取得し、基本的に呼び出された前の番号ごとに関数を呼び出すこの小さなyieldメソッドがあります。

  • 最初の呼び出しは初期番号を返します
  • 2 番目の呼び出しは、関数 (初期番号) を返します
  • 3 番目の呼び出しは関数 (2 番目の数値) を返します
  • 4 番目の呼び出しは関数 (3 番目の数値) を返します

など。Python のコードは次のとおりです。

def some_func(function, number):
    while True:
        yield number
        number = function(number)

このスニペットをジェネレータ式に変換する方法は何ですか? これを行うには非常にPythonicでエレガントな方法があると思いますが、頭がわかりません。

私はジェネレーター式にまったく慣れていないので、なぜ助けを求めているのですが、一般的な Gen Exp と特に Python の知識を広げたいと思っています。

4

1 に答える 1

5

あなたが今持っているものに固執してください。関数をジェネレータ式に変換することはできますが、判読不能な混乱になります。

ジェネレーター式には、ジェネレーター関数にはない、ループする別の iterable が必要です。ジェネレータ式も、実際には他の変数にアクセスできません。式とループだけがあり、オプションのifフィルターとその他のループがあります。

ジェネレータ式は次のようになります。

from itertools import repeat

number = [number]
gen = ((number[0], number.__setitem__(0, function(number[0]))[0] for _ in repeat(True))

ここでnumber、「変数」として悪用します。

于 2013-11-30T12:26:36.127 に答える