<p>你处理这件事的方式真的没有错。您只需以正确的方式将lambda合并到其余代码中:</p>
<pre><code>myList = [1,2,3,10,4,5,6,7,8,9]
def maxVal(list_a, compare_function):
max = -sys.maxsize - 1 # strange but true...this seems to be the canonical way to get the smallest 32 bit `int`
for i in list_a:
if compare_function(i, max):
max = i
return max
my_compare_function = lambda x,y: max(x, y)
print(maxVal(myList, my_compare_function))
</code></pre>
<p>结果:</p>
^{pr2}$
<p>我确实需要更改调用<code>return max</code>的级别。我不知道这是一个逻辑错误,还是仅仅是一个转录错误,当你把你的代码放入一个S.O.问题。还请注意,我将10移到输入数据的另一个位置,以确保它不必在最后才被发现是最大值。在</p>
<p>如果你想要一个“更酷”和更现代的答案,<code>reduce</code>真的是专为做你想做的事而设计的。这里有一个简单的解决方案。在</p>
<pre><code>import functools
myList = [1,2,3,10,4,5,6,7,8,9]
r = functools.reduce(lambda v1, v2: max(v1, v2), myList)
print(r)
</code></pre>
<p>结果:</p>
^{pr2}$
<p>还请注意,“max”本身是一个接受两个参数的函数,因此您可以直接使用它来获得非常简单的结果……在指定使用lambda的情况下,这并不适用:</p>
<pre><code>myList = [1,2,3,10,4,5,6,7,8,9]
r = functools.reduce(max, myList)
print(r)
</code></pre>
<p>这些等同于写循环的函数非常流行,这是有原因的。当结合以流的方式处理数据时,这是一个非常强大的想法。随着它越来越受欢迎,我认为它会被认为更具可读性。作为一个老前辈,我刚刚开始接受所有这些函数/流编程……更多的是用Java而不是Python,但仍然如此。这是一套功能强大的工具,有助于您真正理解。在</p>