在 Python 3.x 中,print 是一个函数。因此,您必须像这样将两个值作为参数传递
print (i, L[i])
当你说
print (i), (L[i])
Python 3.x 接受i 作为print 的参数,并将(L[i]) 视为一个单独的表达式并对其进行评估,但这不会传递给print 函数。这就是为什么总是打印第一个元素。
除此之外,您的整个语句将被评估为以下元组
(None, L[i])
要理解这一点,请在 Python REPL 中尝试类似的操作
>>> print (1), (2)
1
(None, 2)
当内部print 和1 被执行时,它将返回None 并且下一个元素是2。在 Python 中,当你编写两个用逗号分隔的表达式时,在括号中,它们将成为一个元组。
你可以用 Python 生成的字节码来确认,像这样
from dis import dis
code1 = compile("print (1), (2)", "<string>", "exec")
dis(code1)
输出
1 0 LOAD_NAME 0 (print)
3 LOAD_CONST 0 (1)
6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
9 LOAD_CONST 1 (2)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 2 (None)
19 RETURN_VALUE
BUILD_TUPLE 对应于元组构造,由于我们不使用它,它会立即被丢弃。