什么是x =' y' ' Z'在Python?

时间:2014-10-17 20:40:11

标签: python string syntax concatenation python-internals

如果在Python中运行x = 'y' 'z',则会将x设置为'yz',这意味着当Python看到彼此相邻的多个字符串时会发生某种字符串连接。 / p>

但这是什么样的连接? 它实际上是在运行'y' + 'z'还是正在运行''.join('y','z')或其他什么?

2 个答案:

答案 0 :(得分:58)

Python 解析器将其解释为一个字符串。这在Lexical Analysis documentation

中有详细记载
  

字符串文字串联

     

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

编译后的Python代码只看到一个字符串对象;你可以通过让Python生成这样的字符串的AST来看到这个:

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

实际上,构建AST的行为是触发连接,因为遍历了解析树,请参阅AST C源中的parsestrplus() function

该功能专门用于减少对反斜杠的需求;当它仍然在logical line内时,用它来分隔物理线上的字符串:

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

使用括号,方括号或大括号,可以将多条物理线implicitly be joined放入一条物理线。

string concatenation feature是从C复制的,但是Guido van Rossum is on record regretting adding it to Python。该帖子引发了一个漫长且非常有趣的帖子,并且完全支持删除该功能。

答案 1 :(得分:8)

在执行任何操作之前,字符串由python解析器连接,所以它不像'y' + 'z'''.join('y','z'),除了它具有相同的效果。