<h2>接近</h2>
<p>避免使用<code>if-stmts</code>查找最大值。使用python内置<code>max</code>。使用生成器或<code>filter</code>只查找奇数。</p>
<p>使用这样的内置代码更安全/更可靠,因为编写它们更简单,代码经过了很好的测试,并且代码主要在C语言(而不是多字节代码指令)中执行。</p>
<h2>代码</h2>
<pre><code>def find_largest_odd(*args):
return max(arg for arg in args if arg & 1)
</code></pre>
<p>或:</p>
<pre><code>def find_largest_odd(*args):
return max(filter(lambda x: x & 1, args))
</code></pre>
<h2>测试</h2>
<pre><code>>>> def find_largest_odd(*args):
... return max(arg for arg in args if arg & 1)
...
>>> print find_largest_odd(1, 3, 5, 7)
7
>>> print find_largest_odd(1, 2, 4, 6)
1
</code></pre>
<p>以及:</p>
<pre><code>>>> def find_largest_odd(*args):
... return max(filter(lambda x: x & 1, args))
>>> print find_largest_odd(1, 3, 5, 7)
7
>>> print find_largest_odd(1, 2, 4, 6)
1
</code></pre>
<p>如果您传递一个空序列或只提供偶数,您将得到一个<code>ValueError</code>:</p>
<pre><code>>>> find_largest_odd(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in find_largest_odd
ValueError: max() arg is an empty sequence
</code></pre>
<h2>参考文献</h2>
<ul>
<li><a href="http://docs.python.org/2/library/functions.html#filter" rel="noreferrer">filter</a></li>
<li><a href="http://docs.python.org/2/library/functions.html#max" rel="noreferrer">max</a></li>
<li><a href="http://docs.python.org/2/tutorial/classes.html#generators" rel="noreferrer">generators</a></li>
</ul>