2

在我将一个列表附加到另一个列表之后,我试图在 Python 中打印出列表中的所有元素。问题是它只在我使用 PRINT 或 RETURN 时打印出每个元素。如果我使用 print 它会在列表末尾的“None”列中打印出整个列表,但 return 只会打印出第一项。为什么?

这是代码:

def union(a,b):
    a.append(b)
    for item in a:
        return item


a=[1,2,3,4]
b=[4,5,6]
print union(a,b)

它返回:

1

如果我使用

def union(a,b):
    a.append(b)
    for item in a:
        print item

a=[1,2,3,4]
b=[4,5,6]
print union(a,b)

相反,我得到:

1

2

3

4

[4、5、6]

没有任何

(甚至不是一行)。

请注意,我在这个问题上找到了更多结果(比如这个),但它们并不完全相同,而且它们对我来说相当复杂,我刚刚开始学习编程,谢谢!

4

4 回答 4

9

使用return语句时,函数结束。您只返回第一个值,循环不会继续,也不能以这种方式一个接一个地返回元素。

print只是将该值写入您的终端,而不是结束函数。循环继续。

建立一个列表,然后返回

def union(a,b):
    a.append(b)
    result = []
    for item in a:
        result.append(a)
    return result

或者只是返回一个连接:

def union(a, b):
    return a + b
于 2013-07-27T12:06:19.603 回答
1

return表示函数的结束。它只会返回列表的第一个元素。

对于您的print版本,a.append(b)使a = [1,2,3,4,[1,2,3]]您将看到之前的元素None。该函数不返回任何内容,因此print union(a, b)将打印一个无。

我想你可能想要:

def union(a, b):
    a.extend(b)
    return a

或者

def union(a, b):
    return a + b
于 2013-07-27T12:06:51.287 回答
1
def union(a,b):
    a.extend(b)
    for item in a:
        print item,
    return a


a=[1,2,3,4]
b=[4,5,6]
union(a,b)

印刷

1 2 3 4 4 5 6
于 2013-07-27T12:08:11.903 回答
1

return顾名思义,该语句将使函数返回,从而停止周围for循环的任何迭代(在您的代码中,for循环将只迭代一次)。

如果您想将两个“连接”列表的结果作为单个列表返回,这将起作用:

def union(a,b):
    a.append(b)
    return a

如果您期望 的行为有所不同,那么您可能会将其与生成生成器函数的关键字return混淆了?yield

def union(a,b):
    a.append(b)
    for item in a:
        yield item

a=[1,2,3,4]
b=[4,5,6]
for i in union(a, b):
    print i

此代码还将打印列表中由附加ba.

基本上,yeld它的作用是暂停该方法的当前执行,该方法将在下一次从其yield自身之后开始(直到StopIteration将上升,因为itemsina将完成)。

于 2013-07-27T12:15:23.320 回答