2011-09-16 11 views
1

のリターンリスト結果の問題、私は印刷機能Pythonの:機能

def numberList(items): 
    number = 1 
    for item in items: 
     print(number, item) 
     number = number + 1 

numberList(['red', 'orange', 'yellow', 'green']) 

でこれを行う場合、私は、私はちょうどのみ取得機能を返すために、印刷機能を変更した場合、私はこの

1 red 
2 orange 
3 yellow 
4 green 

を取得これは:

(1, 'red') 

なぜそうですか?

print関数とまったく同じように動作するリターン関数が必要ですが、コードを変更したり書き換えたりする必要があります...ありがとうございます... Plsはあなたの応答をできるだけ簡単でわかりやすいものにします。 .cheers

答えて

7

returnは、関数を終了:

def numberList(items): 
    number = 1 
    for item in items: 
     yield str((number, item)) 
     number = number + 1 

item_lines = '\n'.join(numberList(['red', 'orange', 'yellow', 'green'])) 

あるいは、returnリスト:

def numberList(items): 
    indexeditems = [] 
    number = 1 
    for item in items: 
     indexeditems.append(str((number, item))) 
     number = number + 1 
    return indexeditems 

item_lines = '\n'.join(numberList(['red', 'orange', 'yellow', 'green'])) 

または単にenumerate使用:

item_lines = '\n'.join(str(x) for x in enumerate(['red', 'orange', 'yellow', 'green'], 1))) 

Inいずれの場合も'\n'.join(str(x) for x in iterable)はリストのようなものをとり、printのように各項目を文字列に変換し、複数のprint文のように改行で各文字列を結合します。

+0

+1の列挙とあなたのリストソリューションへの追加(これは私がそれに答えるつもりだった)です。 – daveydave400

+0

ありがとうagf ...非常に役立ちます。 –

0

return関数return最初に値がヒットした場合、関数は終了します。ループ内のprint関数のように決して動作しません。

リファレンスドキュメント:http://docs.python.org/reference/simple_stmts.html#grammar-token-return_stmt

あなたが達成しようとしているのは何?

あなたは可能性が常にreturn次を持っていたdict

{'1':'red','2':'orange','3':'yellow','4':'green'} 

すべての要素が1つの戻り値で保持されるように。 yieldは、一度に1つの値を吐き出すジェネレータを作成しながら

+0

私は質問します。 –

+0

提案したように1つの返品オブジェクトのすべての要素を取得するか、提案されたagfとして「yield」を使用しない限り、必要なのは不可能です。 'return'ステートメントは関数を終了します - 複数回返ることはできません。 – mwan

0

関数が "return"ステートメントを検出すると、それはさらなるコードの処理を停止し、関数を終了します。それが最初の値だけを返す理由です。関数から2回以上返すことはできません。

+0

これは彼にそれをする方法を助けるものではありません。 – agf