2017-02-21 8 views
0

私は、10未満の奇数を生成するジェネレータ関数によって返された3番目の値を出力しようとしています。しかし、何らかの値を出力することができませんでした。私が見つけたこの質問に対する最も一般的な答えは、以下のコードです。ジェネレータ関数から返された値を出力するにはどうすればよいですか?

def get_odds(): 
    yield (n for n in range(10) if n % 2 != 0) 
for n in get_odds(): 
    print(n) 

これが返されます:それはそうで、その後、31返す、とすべきである

<generator object get_odds.<locals>.<genexpr> at 0x000001C88ABFC258>

。ジェネレータ関数によって生成された値を返すにはどうすればよいですか?あなたの方法で

+0

あなたのお手伝いをする答えを選択し、あなたがそう傾けられている場合はアップヴォートすることが慣例です。 –

答えて

2

表現(n for n in range(10) if n % 2 != 0)は、それ自体で発電機です。それは、あなたがそれを得るときにあなたのprintステートメントがピックアップしているものです。必要に応じて動作させるコードを書き直すには、いくつかの方法があります。

些細:

def get_odds(): 
    return (n for n in range(10) if n % 2 != 0) 
for n in get_odds(): 
    print(n) 

収率で生成関数:

def get_odds(): 
    for n in range(10): 
     if n % 2: 
      yield n 
for n in get_odds(): 
    print(n) 

コードのoverkilled修正として明示的収率せず

for n in (n for n in range(10) if n % 2 != 0): 
    print(n) 

生成関数投稿:

def get_odds(): 
    yield (n for n in range(10) if n % 2 != 0) 
for n in next(get_odds()): 
    print(n) 
1

、あなたの発電機は別の発電機

>>> def get_odds(): 
...  yield (n for n in range(10) if n % 2 != 0) 


>>> odd = get_odds() 
>>> odd 
<generator object get_odds at 0x102270f10> 
>>> n = next(odd) 
>>> n 
<generator object get_odds.<locals>.<genexpr> at 0x102270eb8> 
>>> next(n) 
1 
>>> next(n) 
3 
>>> next(n) 
5 

が含まれていますが、このようなコードを書く必要があります。

def get_odds(): 
    for n in range(10): 
     if n % 2 != 0: 
      yield n 
+0

タプルではありません...ジェネレータは、その中に 'for'を持っています。 –

+0

ええ、それはジェネレータであり、あなたが望むジェネレータだけを含んでいます。 – Pythonify

+0

タプルではありません。あなたは答えを書き直すことを検討すべきです –

関連する問題