当前位置:  首页>> 技术小册>> Python合辑5-格式化字符串

虽然f-string十分的便捷,但它并不能完全代替str.format。f-string在表达式出现的上下文中进行求值计算。根据PEP498,这意味着该表达式可以获取所有局部和全局变量。而且该表达式是在运行时计算的表达式。如果在 { } 之中使用的表达式无法被计算,就会跳出如下异常。

  1. >>> f"{name}"
  2. ---------------------------------------------------------------------------
  3. NameError Traceback(most recent call last)
  4. <ipython-input-1-f0acc441190f> in<module>
  5. ----> 1 f"{name}"
  6. NameError: name 'name' is not defined

这对 str.format 来说就不是问题,可以提前定义一个模板字符串,并在之后调用.format方法时再传递上下文信息。

  1. >>> s = "{name}"
  2. >>> s.format(name="Python")
  3. 'Python'
  4. >>> print(s)
  5. {name}

另外还有个限制是,不能在f-string中使用行内注释。

  1. >>> f"My name is {name #name}!"
  2. File "<ipython-input-37-0ae1738dd871>", line 1
  3. f"My name is {name #name}!"
  4. ^
  5. SyntaxError: f-string expression part cannot include '#'

该分类下的相关小册推荐: