擅长:python、mysql、java
<p>首先,最好显式地与<code>None</code>进行比较,而不是“滥用”布尔值<code>None</code>。请记住Python的Zen(<a href="https://www.python.org/dev/peps/pep-0020/" rel="nofollow noreferrer">PEP-20</a>)中的“显式优于隐式”。就是</p>
<pre><code>if preference.level is not None and ...
</code></pre>
<p>总比</p>
<pre><code>if preference.level and ...
</code></pre>
<p>另一方面,通过执行以下操作,<em>可以</em>利用<code>None</code>具有布尔<code>False</code>值的事实:</p>
<pre><code>if (preference.level or 0) >= gauge.level:
</code></pre>
<p>而不是:</p>
<pre><code>if preference.level and preference.level >= gauge.level:
</code></pre>
<p>当然,您应该指定适当的值,而不是<code>0</code>(取决于<code>gauge.level</code>可以有哪些值);这只是一个例子</p>
<p>使用<code>or</code>运算符为变量提供默认值,该变量可以是<code>None</code>(或<code>False</code>,或任何其他布尔值的伪等价物),实际上在Python程序中非常常用,我将其称为“Pythonic”方式来表示</p>
<p>顺便说一下,你的<code>for</code>循环是没有意义的,因为你的循环体总是在第一次通过循环时返回</p>