擅长:python、mysql、java
<p>基本上,您的解决方案几乎和它所得到的一样优雅(如果您发现它普遍有用,您当然可以将它放在一个实用模块中)。如果您希望它使用一个无限对象来减少一点代码,您可以这样做,但是您还必须包括一个类定义,它会再次增长代码(除非您内联了类定义):</p>
<pre><code>def checkSorted(it):
prev = type("", (), {"__lt__": lambda a, b: False})()
for x in it:
if prev < x:
raise ValueError("Not sorted")
prev = x
yield x
</code></pre>
<p>第一行是使用<code>type</code>首先创建一个类,然后实例化它。此类的对象比任何对象(无穷大对象)都要少。在</p>
<p>执行一行程序的问题是您必须处理三个构造:更新状态(赋值)、抛出异常和执行循环。您可以通过使用语句轻松地执行这些操作,但是将它们变成一个oneliner意味着您将不得不尝试将这些语句放在同一行上—这反过来会导致循环和<code>if</code>-构造出现问题。在</p>
<p>如果你想把整个事情放到一个表达式中,你必须使用肮脏的技巧来完成这些,赋值和循环<code>iterutils</code>可以提供,抛出可以通过使用生成器中的<code>throw</code>方法来完成(它也可以在表达式中提供):</p>
^{pr2}$
<p>最后一个<code>it</code>是要检查的迭代器,表达式的计算结果是已检查的迭代器。我同意它不好看,也不明显它的作用,但你要求它(我不认为你想要它)。在</p>