Flask 语法 f-string 带单引号

Flask syntax f-string with single quotation mark

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

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

谁能帮我分解一下这条线?

  1. f string 的意思是return 一个string
  2. Post() 的结果
  3. '{self.title}' 是一个字符串参数,因为 ''
  4. {}用于获取一个变量。
  5. 但在上下文中 self.title 已经是一个字符串,为什么要使用 ' '? 我的解释正确吗? ' ' 在这里做什么?

我没有检查 link 但这只是 returns 一个可以分解成这个的字符串。

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()

在教程中他returns这个值用于class的__repr__方法。
在对象上调用 repr() 时调用此方法。当您在 class 上使用 str()print() 时,如果尚未为其实现 __str__ 方法,也会调用它。

实施__repr__方法的目的是为了帮助调试。
如果您尝试打印对象 而没有 定义 __repr__,它会像 <Post object at 0x00000000> 一样打印出来,这没有帮助!

single-quotes是装饰用的,不是必须的


另请参阅:Difference between __str__ and __repr__?

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