字符串如何/在哪里实现?

时间:2019-06-17 16:50:11

标签: python

fstrings如何在Python中实现?我正在通过IDE查看字符串和fstring变量具有相同推断类型str的类型。它是一个全新的类还是实现与字符串相同的接口?解释它是如何工作的。

我问的原因是因为我想评估我们实施我们的版本是否合理。另外,有可能这样做,以使IDE能够根据字母推断出不同的类型。

2 个答案:

答案 0 :(得分:3)

(无论如何,还是在CPython中)实现了它们……

  • here在ASDL语法定义中
  • 据我所知,
  • herehere在AST变压器中
  • here在优化器中
  • here在编译器中
  • here在实际的运行时评估程序中。

我可能错过了一些景点。

基于此,我想说添加其他前缀会很困难,并且您实际上将在创建自己的Python分支。

答案 1 :(得分:1)

来自PEP 498

  

F字符串提供了一种使用最小语法在字符串文字中嵌入表达式的方法。应当注意,f字符串实际上是在运行时评估的表达式,而不是常数。在Python源代码中,f字符串是文字字符串,前缀为'f',其中大括号内包含表达式。表达式将替换为其值。

fstrings是在CPython内部实现的-处理它们实际上是评估括在花括号内的表达式,这里是one example from CPython source code,用于解析表达式。

我们可以使用dis来观察操作码:

import dis

dis.dis("f'{x}'")                                                                                                                    
  1           0 LOAD_NAME                0 (x)
              2 FORMAT_VALUE             0
              4 RETURN_VALUE

dis.dis("x")                                                                                                                     
              0 LOAD_NAME                0 (x)
              2 RETURN_VALUE

您可以看到,唯一添加的操作码是FORMAT_VALUE,这确认fstring没有增加任何开销,并且它们实际上是一个表达式,而不是format,例如,我们看到{{ 1}},LOAD_CONSTLOAD_ATTR

CALL_FUNCTION