在Python中,使用F-string引用字符串值。

3
我正在尝试引用我在Python中发送给f-string的值之一。
f'This is the value I want quoted: \'{value}\''

这个方法可以实现,但我想知道是否有一种格式化选项可以自动完成这个操作,就像在Go语言中使用%q一样。基本上,我正在寻找类似于这样的东西:
f'This is the value I want quoted: {value:q}'
>>> This is the value I want quoted: 'value'

我也可以接受使用双引号。这样可以吗?

2
只要使用其他引号就可以了吗?f"这是我想要引用的值:'{value}'" - undefined
据我所知,该功能并不存在。 - undefined
3
{value!r} (repr()的值) 有点类似于这样做,尽管您无法选择所使用的引号类型。 - undefined
阅读代码时,我实际上希望能清楚地看到嵌入和转义的引号,而不是不得不查找一个神秘的标志来自动完成这个操作,但这只是我的个人偏好。 - undefined
@AbhijitSarkar 这个问题在于很难正确地确定如何转义它们。想一想如果你要转义 value = """a'b"c""" 会是怎样的。 - undefined
@Mike'Pomax'Kamermans 在这里提供一些背景信息,我正在使用它来引用错误消息中的字符串值。如果我和其他人必须手动转义引号,那么对于这些情况,我更希望有一个标准化的输出方式。 - undefined
2个回答

5
使用显式转换标志!r:
>>> value = 'foo'
>>> f'This is the value I want quoted: {value!r}'
"This is the value I want quoted: 'foo'"

r代表reprf'{value!r}'的结果应该等同于使用f'{repr(value)}'(这是f-strings之前的一个特性)。

出于某种未在PEP中记录的原因,还有一个!a标志,它会使用ascii进行转换:

>>> f'quote {""!a}'
"quote '\\U0001f525'"

而且还有一个str!s,看起来没什么用... 除非你知道对象可以重写它们的格式化程序,以执行与object.__format__不同的操作。它提供了一种退出这些花招并仍然使用__str__的方法。
>>> class What:
...     def __format__(self, spec):
...         if spec == "fancy":
...             return ""
...         return "potato"
...     def __str__(self):
...         return "spam"
...     def __repr__(self):
...         return "<wacky object at 0xcafef00d>"
... 
>>> obj = What()
>>> f'{obj}'
'potato'
>>> f'{obj:fancy}'
''
>>> f'{obj!s}'
'spam'
>>> f'{obj!r}'
'<wacky object at 0xcafef00d>'

2
我点赞了,但可能值得指出的是,这与字符串上的repr相同。 - undefined
@juanpa.arrivillaga 已添加。 - undefined

0
另一种方法可能是使用字符串格式化,例如:
string ="Hello, this is a '%s', '%d' is a decimal, '%f' is a float"%("string", 3, 5.5)
print(string)

这将返回:
Hello, this is a 'string', '3' is a decimal, '5.500000' is a float

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