有问题的代码:
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字符串格式化实例。
这个假设是否正确?还有其他一些地方可以更清楚地记录这一点吗?
答案 0 :(得分:7)
在f'{ {a} }'
中,{a}
(由语法指示)被解释为Python表达式。在Python中,{a}
构造一个元素set
(a
),并且集合的str
内容使用其元素的repr
,这是引号来自哪里。