mer*_*att 37 python string syntax concatenation python-internals
如果您运行x = 'y' 'z'在Python中,你得到x设置'yz',这意味着当Python看到彼此相邻的多个字符串某种字符串连接的发生.
但这是什么样的串联?它实际上正在运行'y' + 'z'还是正在运行''.join('y','z')或其他什么?
Mar*_*ers 58
Python 解析器将其解释为一个字符串.这在Lexical Analysis文档中有详细记录:
字符串文字串联
允许使用多个相邻的字符串文字(由空格分隔),可能使用不同的引用约定,并且它们的含义与它们的连接相同.因此,
"hello" 'world'相当于"helloworld".
编译后的Python代码只看到一个字符串对象; 你可以通过要求Python生成这样的字符串的AST来看到这一点:
>>> import ast
>>> ast.dump(ast.parse("'hello' 'world'", mode='eval').body)
"Str(s='helloworld')"
Run Code Online (Sandbox Code Playgroud)
事实上,在遍历解析树时,正是构建AST的行为触发了连接,请参阅AST C源代码中的parsestrplus()函数.
该功能专门用于减少对反斜杠的需求; 当它仍在逻辑行内时,使用它来分隔物理行的字符串:
print('Hello world!', 'This string is spans just one '
'logical line but is broken across multiple physical '
'source lines.')
Run Code Online (Sandbox Code Playgroud)
通过使用括号,方括号或花括号可以隐式地将多个物理线连接到一个物理线中.
这个字符串连接功能是从C复制的,但是Guido van Rossum在记录中遗憾地将它添加到Python中.该帖子引发了一个漫长且非常有趣的帖子,并且完全删除了该功能.
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |