擅长:python、mysql、java
<p>当你观察到意想不到的行为时,开始你的分析,把它提炼成最简单的情况。一个简单的案例更容易研究和理解。在</p>
<p>意外行为:</p>
<pre><code>>>> 'hello %s' % 3 * 2
'hello 3hello 3'
</code></pre>
<p>(您期望<code>'hello 6'</code>)</p>
<hr/>
<p>我们认为Python必须将命令解释为<code>'hello 3' * 2</code>,而不是{<cd3>}。我们试着用括号强迫第二种解释</p>
^{pr2}$
<p>尤里卡!在</p>
<p>我们已经证明了字符串格式化运算符<code>%</code>的优先级高于或等于乘法。我们检查Python文档-是的,它确认了<a href="http://docs.python.org/reference/expressions.html#summary" rel="nofollow">http://docs.python.org/reference/expressions.html#summary</a></p>
<p>为了确认优先级相等,我们可以用另一种方法:</p>
<pre><code>>>> "%d,"*2%(1,2)
'1,2,'
</code></pre>
<p>由于逗号(,)是重复的,我们推断乘法<code>"%d," * 2</code>是在字符串格式化<code>%</code>之前执行的。如果乘法可以先于字符串格式,而字符串格式先于乘法,则它们的优先级必须相等。在</p>