为什么这种用python F-string插值包装带引号?

时间:2017-07-14 21:52:31

标签: python string specifications python-3.6 string-interpolation

有问题的代码:

a = 'test'

# 1)
print(f'{a}') # test

# 2)
print(f'{ {a} }') # {'test'}

# 3)
print(f'{{ {a} }}') # {test}

我的问题是,为什么案例2会打印这些引号?

我在documentation中没有明确找到任何内容。我发现最接近细节的是这个功能的PEP

(F字符串的语法)

f ' <text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ... '
  

然后使用格式协议格式化表达式   格式说明符作为参数。结果值用于   建立f-string的值。

我认为a的值正在使用某种格式化程序进行格式化,因为数据类型是字符串,所以格式化它包含引号。然后将此结果返回到周围的F字符串格式化实例。

这个假设是否正确?还有其他一些地方可以更清楚地记录这一点吗?

1 个答案:

答案 0 :(得分:7)

f'{ {a} }'中,{a}(由语法指示)被解释为Python表达式。在Python中,{a}构造一个元素seta),并且集合的str内容使用其元素的repr,这是引号来自哪里。