为什么 print 和 f-string 在不同的时间执行评估?
Why do print and f-string perform evaluation at different times?
print
和 f-string 中变量的求值是否发生在不同的时间?
我预计两者的输出相同。
def foo(x):
x.append([5])
return x
y, z = [1], [3]
print('y:', y, 'z:', z)
# y: [1] z: [3]
print('y:', y, 'str(y):', str(y), 'foo(y):', foo(y))
# y: [1, [5]] str(y): [1] foo(y): [1, [5]]
print(f'z: {z} foo(z): {foo(z)} z: {z}')
# z: [3] foo(z): [3, [5]] z: [3, [5]]
谁能解释一下这是怎么回事?
在这两种情况下,表达式都是从左到右求值的。在 f-string 的情况下,每个都在评估后立即转换(str
),但在 print
的情况下(这是一个正常的函数调用) ,所有这些都被评估(因此 y
被变异) 在 之前,它们中的任何一个都被转换为 print
中的字符串。在对 print
的调用中显式写入 str(y)
将产生相同的结果。
print
和 f-string 中变量的求值是否发生在不同的时间?
我预计两者的输出相同。
def foo(x):
x.append([5])
return x
y, z = [1], [3]
print('y:', y, 'z:', z)
# y: [1] z: [3]
print('y:', y, 'str(y):', str(y), 'foo(y):', foo(y))
# y: [1, [5]] str(y): [1] foo(y): [1, [5]]
print(f'z: {z} foo(z): {foo(z)} z: {z}')
# z: [3] foo(z): [3, [5]] z: [3, [5]]
谁能解释一下这是怎么回事?
在这两种情况下,表达式都是从左到右求值的。在 f-string 的情况下,每个都在评估后立即转换(str
),但在 print
的情况下(这是一个正常的函数调用) ,所有这些都被评估(因此 y
被变异) 在 之前,它们中的任何一个都被转换为 print
中的字符串。在对 print
的调用中显式写入 str(y)
将产生相同的结果。