连接相邻字符串文字时的 Python 运算符优先级

Posted

技术标签:

【中文标题】连接相邻字符串文字时的 Python 运算符优先级【英文标题】:Python operator precedence when concatenating adjacent string literals 【发布时间】:2017-08-14 13:24:46 【问题描述】:

文档说两个相邻的字符串文字是连接在一起的。例如:

>>>print("py" "thon")
python

但是,这个特性是在编译时实现的,而不是像 + 和 * 运算符那样在运行时实现,所以会出现这个有趣的效果:

>>>print(2 * "py" + "thon")
pypython
>>>print(2 * "py" "thon")
pythonpython

我理解为什么会在该语言中发生这种情况,但我想不出为什么会这样。有什么原因吗,还是更容易让它不理会?

【问题讨论】:

python 要求将内容放在一行中的又一个漏洞。 我猜这是因为python在第一种情况下没有将文字连接视为操作。 docs.python.org/2/reference/… 【参考方案1】:

坦率地说,如果我今天要设计python,我会做

print ("py" "thon")

语法错误

print (5 3)

我猜想连接相邻字符串的原因是为了与 bash / perl 保持一致

echo "py""thon"

【讨论】:

这很好。现在我想起来了,我知道没有什么场景是你不能使用 + 运算符的。 有充分的理由允许字符串文字连接用于可视化目的(请参阅:***.com/questions/2504536/…)。但是,问题是为什么这是在编译时而不是运行时实现的

以上是关于连接相邻字符串文字时的 Python 运算符优先级的主要内容,如果未能解决你的问题,请参考以下文章

当前缀字符串与非前缀字符串相邻时,字符串文字连接失败?

python的or操作符连接多个字符串含义是什么?

Python 3学习笔记

与 ? 一起使用时的逗号运算符优先级: 运算符 [重复]

两万文字详解Python正则表达式(语法验证方法使用案例练习题常见错误)

Python tutorial阅读之Python基本运算与基本变量