带单引号的烧瓶语法f字符串

问题描述

在Flask教程中,https://www.youtube.com/watch?v=cYWiDiIUxQc&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH&index=4 我想了解一种语法

return f"Post('{self.title}','{self.dateposted}')"

有人可以帮我分解这行吗?

  1. f string表示以字符串形式返回Post()的结果
  2. '{self.title}'是一个字符串参数,因为使用''
  3. {}用于获取变量。
  4. 但是在self.title已经是字符串的情况下,为什么要使用' '? 我的解释正确吗? ' '在这里做什么?

解决方法

在教程中,他为类的__repr__方法返回此值。
在对象上调用repr()时将调用此方法。如果尚未为其实现str()方法,则在类上使用print()__str__时也会调用它。

实现__repr__方法的目的是帮助调试。
如果您尝试打印没有定义__repr__的对象 ,它将像<Post object at 0x00000000>一样打印出来,这无济于事!

单引号用于装饰,实际上并不是必须的。


另请参阅:Difference between __str__ and __repr__?

您可能也有兴趣阅读Luciano Ramalho的 Fluent Python ,因为它涵盖了这些方法并给出了如何使用它们的绝佳示例(除了很多其他Python智慧之外)>

,

我没有检查链接,但这只是返回一个可以分解为该字符串的字符串。

return "Post('" + self.title + "','" + self.dateposted + "')"

返回的字符串我不知道怎么办,但是我认为它是在其他地方求值的。

但是f字符串所做的只是将变量或表达式嵌入到您的字符串中。

如果变量不是字符串,它将首先将其转换为字符串。

要分解您的示例,请使用fstring嵌入{}中的所有内容。 由于'是单引号,且在花括号之外,因此它们也是字符串的一部分。

可以说self.title等于"My Title",而self.dateposted等于"08-22-2020"。返回的字符串将导致

"Post('My Title','08-22-2020')"

如果您随后使用此字符串调用exec(),它将使用2个位置字符串参数调用Post()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...