<h2>把它降到1个令牌实例<code>obj</code>是很困难的,但是有很多有趣的方法可以把它降到2个实例</h2>
<p>根据<code>obj</code>的<a href="http://forums.udacity.com/questions/2005120/implicit-boolean-evaluation-aka-truthinessfalsiness" rel="nofollow">truthiness</a>,可以执行以下操作:</p>
<pre><code>obj = obj or myotherobj
</code></pre>
<p>例如:</p>
<pre><code>>>> obj = []
>>> obj = obj or 9000
>>> obj
9000
>>> obj = None
>>> obj = obj or True
>>> obj
True
</code></pre>
<p>或者,如果它是return语句的一部分,则可以将其剪切为一个<code>obj</code>:</p>
<pre><code>return obj or otherobj
</code></pre>
<p>例如:</p>
<pre><code>>>> def foo(x):
... return x or 8
...
>>> foo(4)
4
>>> foo([])
8
>>> foo(0)
8
</code></pre>
<p>如果这是一个<a href="http://en.wikipedia.org/wiki/Code_golf" rel="nofollow">code-golfing problem</a>,您可以使用数组索引和布尔值做一些很酷的事情(但这不会减少<code>obj</code>标记的数量):</p>
<pre><code>>>> obj=None
>>> obj=[obj,9000][obj is None]
>>> obj
9000
</code></pre>
<p>只是为了好玩,最可笑的是:</p>
<pre><code>>>> obj = None
>>> obj = (obj,[1,2,3])[::cmp(bool(obj),0.5)]
>>> obj
[1, 2, 3]
>>> obj = True
>>> obj = (obj,[1,2,3])[::cmp(bool(obj),0.5)]
>>> obj
True
</code></pre>
<p>但是以上两种方法通常都不推荐用于任何正常的生产代码。你知道吗</p>