开发者

Python: Return list result problem in a function

If I do this with print function

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

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

I get this

1 red
2 orange
3 yellow
4 green

if I then change the print function to return function I get just only this:

(1, 'red')

why is this so?

开发者_开发知识库

I need the return function to work exactly like the print function, what do I need to change on the code or rewrite...thanks...Pls do make your response as simple, understandable and straight forward as possible..cheers


return ends the function, while yield creates a generator that spits out one value at a time:

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

alternatively, return a list:

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

or just use enumerate:

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

In any case '\n'.join(str(x) for x in iterable) takes something like a list and turns each item into a string, like print does, and then joins each string together with a newline, like multiple print statements do.


A return function will return the value the first time it's hit, then the function exits. It will never operate like the print function in your loop.

Reference doc: http://docs.python.org/reference/simple_stmts.html#grammar-token-return_stmt

What are you trying to accomplish?

You could always return a dict that had the following:

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

So that all elements are held in the 1 return value.


The moment the function encounters "return" statement it stops processing further code and exits the function. That is why it is returning only the first value. You can't return more than once from a function.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜