返さないで値を生成したいリストがあるとします。これを行うための最もPythonicな方法は何ですか?
これが私の言いたいことです。遅延のない計算のおかげで、リストを計算しました['a', 'b', 'c', 'd']
ですが、プロジェクト全体のコードは遅延計算を使用しているため、リスト全体を返すのではなく、関数から値を生成したいと思います。
私は現在それを次のように書いています:
my_list = ['a', 'b', 'c', 'd']
for item in my_list:
yield item
しかし、これは私にはPythonicを感じません。
iter
を使用してリストイテレータを作成します。
return iter(List)
ただし、すでにリストがある場合は、それを返すだけでよいので、より効率的です。
この質問は特定しないので; Python> = 3. に当てはまる答えを提供します
そのリストを返すだけでよい場合は Anuragの提案 を実行しますが、何らかの理由で問題の関数が本当にジェネレータである必要がある場合は、別のジェネレータに委任できます。結果リストに接尾辞を付けたいが、リストが最初になくなった場合に限ります。
def foo():
list_ = ['a', 'b', 'c', 'd']
yield from list_
if something:
yield this
yield that
yield something_else
pythonのバージョンでは、この構文を使用することはできません。forループと本体に単一のyieldステートメントを使用して、質問のようにコードを使用する必要があります。
あるいは;ジェネレータを通常の関数でラップして chain
edの結果を返すことができます。これにはpython 2と3で動作するという利点もあります
from itertools import chain
def foo():
list_ = ['a', 'b', 'c', 'd']
def _foo_suffix():
if something:
yield this
yield that
yield something_else
return chain(list_, _foo_suffix())
あなたは言うことによってジェネレータを構築することができます
(x for x in List)