Python: возвращаемая проблема результата списка в функции - PullRequest
2 голосов
/ 16 сентября 2011

Если я сделаю это с функцией печати

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')

почему это так?

Мне нужно, чтобы функция возврата работала точно так же, как функция печати, что мне нужно изменить в коде или переписать ... спасибо ... Просьба сделать ваш ответ максимально простым, понятным и понятным, насколько это возможно ... веселит

Ответы [ 3 ]

8 голосов
/ 16 сентября 2011

return завершает функцию, а yield создает генератор, который выплевывает одно значение за раз:

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)))

В любом случае '\n'.join(str(x) for x in iterable) берет что-то вроде списка и превращает каждый элемент в строку, как это делает print, а затем соединяет каждую строку вместе с новой строкой, как это делают несколько операторов print.

0 голосов
/ 16 сентября 2011

В тот момент, когда функция сталкивается с оператором return, она прекращает обработку дополнительного кода и выходит из функции.Вот почему он возвращает только первое значение.Вы не можете возвратиться более одного раза из функции.

0 голосов
/ 16 сентября 2011

A return функция будет return значение в первый раз, когда она нажата, затем функция выходит.Он никогда не будет работать как функция print в вашем цикле.

Справочный документ: http://docs.python.org/reference/simple_stmts.html#grammar-token-return_stmt

Чего вы пытаетесь достичь?

Вы всегда можете return a dict, который имел следующее:

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

Так, чтобы все элементы содержались в возвращаемом значении 1.

...