Python print()在outpu之前计算表达式

2024-04-19 01:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到,print()有时在打印多个语句时输出最终的计算值。举例说明:

a = [1, 2, 3]
print(a, a.reverse(), a)

输出是[3, 2, 1] None [3, 2, 1],但是a的第一个输出不应该是[1, 2, 3]?你知道吗

如果指纹分开了,说:

a = [1, 2, 3]
print(a, end=' ')
print(a.reverse(), a)

输出给出正确的[1, 2, 3] None [3, 2, 1]。你知道吗

这种行为让我花了好几分钟才弄明白这个错误。我到处都在寻找答案,但估计我找错方向了。你知道吗

这是因为值是在print()之前计算的吗?如果是,为什么?你知道吗


更新:

我问这个问题是因为从其他语言的经验来看,这个问题的原因对我来说并不那么明显。例如,PHP:

$a = [1, 2, 3];
var_dump(
    $a, array_pop($a), $a
);

生成不带预执行表达式的输出:

array(3) {[0]=>int(1) [1]=>int(2) [2]=>int(3)}
int(3)
array(2) {[0]=>int(1) [1]=>int(2)}

虽然这个问题可能很愚蠢,但除了这个问题,我看不到其他答案了。你知道吗


Tags: 答案none语言错误原因经验语句方向
1条回答
网友
1楼 · 发布于 2024-04-19 01:19:38

当您调用一个函数时(这里的print()只不过是一个函数),Python必须首先执行构成参数的所有表达式。然后将这些表达式的结果传递到函数调用中。你知道吗

此外,按名称引用对象不会传入该对象的副本,而是传入对象本身。因为a引用了一个列表,所以传递的是该列表,而不是第一个列表的副本。你知道吗

因此在第一个示例中,表达式aa.reverse()a的结果被发送到print()函数。因为a.reverse()改变了一个列表的位置,所以在列表被反转之后,您只需将同一个列表发送给print()调用两次。两个a表达式产生相同的列表,该列表已反转,并传递给print()。你知道吗

在第二个示例中,首先发送a列表,print()函数将其写出,然后在第二个print()调用中,反转该列表并将其传入以再次打印。你知道吗

我的印象是,您可能对Python如何处理名称以及如何将参数传递到函数调用中最困惑。我建议你仔细阅读以下内容:

如果要以相反的顺序传递包含相同元素的列表的副本,则必须显式地这样做。您可以使用a[::-1]list(reversed(a))生成这样的副本。你知道吗

相关问题 更多 >