擅长:python、mysql、java
<p>这个问题的原因是<a href="https://docs.python.org/3/reference/expressions.html#comparisons" rel="nofollow noreferrer">chaining comparison operators</a></p>
<blockquote>
<p>Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent
to x < y and y <= z, except that y is evaluated only once (but in both
cases z is not evaluated at all when x < y is found to be false).</p>
</blockquote>
<p>比较,<strong>包括成员资格测试</strong>和身份测试<a href="https://docs.python.org/3/reference/expressions.html#operator-precedence" rel="nofollow noreferrer">have same precedence</a></p>
<p>即</p>
<pre><code>x.month == 3 and x.date() in shortlongdates == True
</code></pre>
<p>与</p>
<pre><code>x.month == 3 and x.date() in shortlongdates and shortlongdates == True
</code></pre>
<p>注意,它可以写为<code>x.month == 3 and x.date() in shortlongdates</code>,也可以使用括号。但是,正如注释中所述,最好将此lambda编写为常规函数。</strong></p>
<pre><code>def replace_value(x):
if x.date() in shortlongdates:
return {3:-1, 10:1}.get(x.month, 0)
return 0
</code></pre>
<p>如果你坚持的话,我会让你把这个转换回[更简单的]lambda</p>