在 this spot in this articl e 由一位主要的 Python 人员编写,作者指出自动字符串连接是解析器/编译器的一项功能,而不是解释器,这就是为什么必须在运行时使用 + 连接字符串的原因。
我对此一无所知。我知道你可以用 + 连接,我知道并排的两个字符串文字是自动连接的,我知道你当然不能用包含字符串的变量来做,但我不知道有什么区别介于解析器/编译器和解释器(对于 python 或一般而言)之间,我不知道它如何与整个字符串连接相关联。
解释???
请您参考如下方法:
Python 是一种解释型语言(与 C++ 等在执行前编译为机器代码的语言相反)。
现在有一个中间步骤:源(文本)文件被编译为字节码,然后该字节码由 Python 解释器运行。
字节码编译器已经完成逐字字符串连接(如 "a""b" 变成 "ab")。 "a"+ "b" 也是如此,因为编译器已经可以计算出文字值:
>>> import dis
>>> def s(): print "a" "b"
...
>>> dis.dis(s)
1 0 LOAD_CONST 1 ('ab')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>> def s(): print "ab"
...
>>> dis.dis(s)
1 0 LOAD_CONST 1 ('ab')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
>>> def s(): print "a"+"b"
...
>>> dis.dis(s)
1 0 LOAD_CONST 3 ('ab')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
但是对于不能在编译时简单推断的值,解释器的工作就是进行连接:
>>> def s(): print "a" + chr(98)
...
>>> dis.dis(s)
1 0 LOAD_CONST 1 ('a')
3 LOAD_GLOBAL 0 (chr)
6 LOAD_CONST 2 (98)
9 CALL_FUNCTION 1
12 BINARY_ADD
13 PRINT_ITEM
14 PRINT_NEWLINE
15 LOAD_CONST 0 (None)
18 RETURN_VALUE
>>> s()
ab
