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')
,只是它具有相同的效果。