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.