Python区分格式化字符串和普通字符串的参数是什么?

4
x = f"There are {n} types of people"

print(type(x)==type("HELLO")) #returns True

如果格式化字符串和普通字符串的类型相同,函数如何区分何时对其进行格式化或不进行格式化?

我猜想每当我在字符串前面指定了f时,解释器会立即拾取变量的值并将其格式化,函数接收到一个格式化的字符串。

这是否像Java 8中的lambda一样是一种简写符号呢?


4
请参考PEP-498:"需要注意的是,f-string实际上是在运行时求值的表达式,而不是一个常数值。" - Daniel Roseman
我很难理解你在这里的期望,你认为f-strings会创建一个新的字符串类型或类吗?为什么? - Chris_Rands
我以为一个函数一次只能接受一个对象。所以,我不知道为什么我认为它应该是一个新的类型(来自Java和C ++)。解释器的概念对我来说是新的。因此,我觉得它应该在“编译时”作为一个新类型解决,并在运行时评估。@Chris_Rands - Tarun Maganti
可能会产生一个编译类型的新对象,在运行时进行格式化处理。 - Tarun Maganti
3个回答

2
在你的例子中:
x = f"There are {n} types of people"

x 不是 f-string,它只是一个普通字符串,已经用变量 n 的值替换了 {n}

f-string 在语法上进行求值,其结果的对象类型为 str


顺便提一句 - f-string 格式化是所有格式化方式的适当超集吗? - Tarun Maganti
2
@TarunMaganti:不支持。例如,datetime.datetime.strftime()是一种格式化方式,而f-strings不支持。 - John Zwinck

1

来自PEP 498

F-strings提供了一种使用最小语法在字符串字面值中嵌入表达式的方法。需要注意的是,f-string实际上是在运行时评估的表达式,而不是一个常量值。在Python源代码中,f-string是一个带有'f'前缀的字面字符串,其中包含花括号内的表达式。这些表达式将被替换为它们的值

(强调是我的)


0

它们是相同的类型。

n = 5
f"There are {n} types of people"

是Python 3.6中引入的一种将变量插入字符串的新方法。

这也可以写成:

n = 5
"There are {:d} types of people".format(n)

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