2017-08-14 84 views
3

文档说,两个相邻的字符串文字是连接的。例如:连接相邻字符串文字时的Python运算符优先级

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

然而,此功能是在编译的时候,而不是像+和*运营商运行时实现的,因此出现这种有趣的效果:

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

我理解为什么会这样的语言,但我想不出是这样的原因。是有原因的,还是容易让它独处?

+0

围绕pythons要求把事情放在一条线上的又一个漏洞。 –

+0

我想这是因为python在第一种情况下并未将字面串联视为操作。 https://docs.python.org/2/reference/lexical_analysis.html#string-literal-concatenation –

回答

1

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

print ("py" "thon") 

语法错误

print (5 3) 

我猜想,之所以串联相邻字符串,用于与bash/perl一致

echo "py""thon" 
+0

这是一个很好的观点。现在我想到了,我知道没有哪种情况下你将无法使用+运算符。 –

+1

为了可视化目的,允许字符串字面串联有充分的理由(请参阅:https://stackoverflow.com/questions/2504536/why-allow-concatenation-of-string-literals)。然而,问题是关于为什么这是在编译时而不是运行时实现的 –