gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:44:47 24 4
gpt4 key购买 nike

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

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

最佳答案

Python 解析器 将其解释为一个字符串。这在 Lexical Analysis documentation 中有详细记录。 :

String literal concatenation

Multiple adjacent string literals (delimited by whitespace), possibly using different quoting conventions, are allowed, and their meaning is the same as their concatenation. Thus, "hello" 'world' is equivalent to "helloworld".

编译后的 Python 代码只看到一个字符串对象;您可以通过要求 Python 生成此类字符串的 AST 来看到这一点:

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

事实上,正是构建 AST 的行为触发了连接,因为解析树被遍历,见 parsestrplus() function在 AST C 源代码中。

该功能专门用于减少对反斜杠的需求;当仍在 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 .那篇帖子引发了一个很长很有趣的话题,很多人都支持完全删除该功能。

关于python - Python 中 x = 'y' 'z' 的底层是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26433138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com