为什么print和f-string在执行时间上不同?

4
< p > 在print和f-string中,变量的评估时间是否不同?< /p > < p > 我以为两者的输出结果会相同。< /p >
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]]

有人可以解释一下正在发生的事情吗?

请注意,格式化字符串将为您提供与多个参数传递给 print 相同的输出:print('y: {} str(y): {} foo(y): {}'.format(y, str(y), foo(y))) - wjandrea
1个回答

3
在这两种情况下,表达式都是从左到右进行评估的。在f-string的情况下,每个表达式在评估后立即转换(使用str),但在print函数调用的情况下(它是一个普通的函数调用),所有表达式都被评估了(因此y被改变),然后在print内部将它们转换为字符串之前。在调用print时明确写入str(y)将产生相同的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接