【问题标题】:Weird Behavior of f-strings and print when used together in Python [duplicate]在Python中一起使用时f字符串和打印的奇怪行为[重复]
【发布时间】:2018-01-23 19:50:24
【问题描述】:

我正在使用 Python 3.6。当 f-strings 和 print 语句在 Python 中一起使用时,我觉得下面的代码有点奇怪

person = {"name": "Jenne", "age": 23}
print(f"Person name is {person["name"]} and age is {person["age"]}")

上述语句导致错误

但是,当 print 语句中跨姓名和年龄的双引号替换为单引号时,它就像一个魅力。

print(f"Person name is {person['name']} and age is {person['age']}")

谁能解释一下这种行为?

【问题讨论】:

  • 那是因为对字符串和字典键使用相同的引号会发生冲突。使用不同的引号可以解决问题。无论哪种方式,字符串的单引号和键的双引号,反之亦然。
  • @JonClements 你不能在 f 字符串表达式中转义引号,'\' 是不允许的
  • @AChampion 哦...将不得不阅读...我从未使用过它们,但听起来我做了一个错误的假设:)
  • @JonClements 哦,我也不知道。谢谢冠军!
  • @AChampion 啊哈……python.org/dev/peps/pep-0498/#id27 说明一切 - 谢谢。

标签: python python-3.x


【解决方案1】:

双引号"name"与双引号外字符串f"Person name is {..."冲突,也就是说"name"的第一个双引号结束了前一个字符串。你不能这样嵌套字符串。

注意f'Person name is...'f'''Person name is...'''f"""Person name is...""" 都可以使用双引号。

【讨论】:

  • 如果这很难理解,只需查看问题的语法突出显示即可。它以相同的方式解析它。
  • 谢谢亚当。你的回答很清楚。
  • @Professor_Joykill 正如我指出的那样,您不能在 f 字符串表达式中使用 '\' - 所以在这种情况下您无法逃脱。
  • 这不是重复的问题。
  • @AChampion 并感谢您的澄清!很长一段时间以来,f-strings 在很大程度上是我最喜欢的新 python 功能。很大程度上是由于我的 Python 用例——我编写了很多脚本供系统管理员使用,而不是很多最终用户或后端应用程序。做print(f"{workstation} :: Copying {src} to {dst}...", end='', flush=True); ok = copy_the_thing(src, dst); if ok: print("SUCCESS!") 太棒了。
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多