Python中x ='y''z'的底层是什么?

如果在Python中运行x = 'y' 'z' ,则会将x设置为'yz' ,这意味着当Python看到多个string相邻时,会发生某种string连接。

但是这是什么样的级联? 它实际上是运行'y' + 'z'还是运行''.join('y','z')还是其他的?

Python parsing器将其解释为一个string。 这在词法分析文档中有很好的logging :

string文字连接

多个相邻的string文字(用空格分隔),可能使用不同的引用约定,是允许的,它们的含义与它们的连接相同。 因此, "hello" 'world'等同于"helloworld"

编译的Python代码只看到一个string对象; 你可以通过让Python产生这样的string的AST来看到这一点:

 >>> import ast >>> ast.dump(ast.parse("'hello' 'world'", mode='eval').body) "Str(s='helloworld')" 

实际上,构buildAST的行为触发了连接,因为遍历了分析树,请参阅AST C源文件中的parsestrplus()函数 。

该function专门用于减less反斜杠的需求; 当它仍然在一个逻辑线内时,用它在物理线上分割一个string:

 print('Hello world!', 'This string is spans just one ' 'logical line but is broken across multiple physical ' 'source lines.') 

通过使用括号,方括号或花括号,多条物理线路可以隐含地连接成一条物理线路。

这个string连接function是从C中复制的,但是Guido van Rossum正在logging将其添加到Python的logging 。 这个post踢了一个很长很有意思的post,完全删除了这个function。

在执行任何事情之前,这些string被pythonparsing器连接起来,所以它不像'y' + 'z'''.join('y','z') ,只是它具有相同的效果。