首先是fstring的結構
f ' <text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ... '
'!s'在表達式上調用str(),'!r'調用表達式上的repr(),'!a'調用表達式上的ascii()
1.默認情況下,f-string將使用str(),但如果包含轉換標志,則可以確保它們使用repr () !
class Comedian:
def __init__(self, first_name, last_name, age):
self.first_name = first_name
self.last_name = last_name
self.age = age
def __str__(self):
return f"{self.first_name} {self.last_name} is {self.age}."
def __repr__(self):
return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"
調用
>>> new_comedian = Comedian("Eric", "Idle", "74")
>>> f"{new_comedian}"
'Eric Idle is 74.'
>>> f"{new_comedian}"
'Eric Idle is 74.'
>>> f"{new_comedian!r}"
'Eric Idle is 74. Surprise!'
2.!a的例子
>>> a = 'some string'
>>> f'{a!r}'
"'some string'"
等價於
>>> f'{repr(a)}'
"'some string'"
3.!d的例子
類似2
pycon2019有人提出的一個展望!d的功能實現:
在python3.8中以及實現上述功能,不過不再使用!d了改為了f"{a=}"的形式