Python:函数中的返回列表问题

2 投票
3 回答
22197 浏览
提问于 2025-04-17 02:25

如果我用打印函数这样做

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 个回答

0

当函数遇到“return”这个语句时,它会立即停止执行后面的代码,并退出这个函数。所以它只返回第一个值。你不能在一个函数里返回多次。

1

一个 return 函数在第一次被调用时会返回一个值,然后就结束了,不会像你在循环中使用的 print 函数那样继续运行。

参考文档: http://docs.python.org/reference/simple_stmts.html#grammar-token-return_stmt

你想要实现什么呢?

你可以返回一个包含以下内容的 dict

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

这样所有的元素都能保存在一个返回值里。

8

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 语句那样。

撰写回答