我正在查看列出的代码here,它们提供了一个非常有趣的结构来在线用Python编写“时钟”。我以前从未见过这种奇怪的语法,老实说,我不知道它是如何工作的。这是巨蟒中的绝对黑色魔法。但是,尽管这不是写作者意图的最恶毒的方式,我还是想知道它是如何运作的。

qClock = (lambda:0, time.clock)[qDuration > 0]
qDuration = (1, (qClock() + qDuration))[qDuration > 0]

我的思想过程:
qClock返回True是否已超过持续时间
qDurration以int开头,但后来改为lambda函数?
为什么在每一个结尾都有列表?我觉得这些不是单子。

最佳答案

这是一种写三元条件的古老方法。应该是:

qClock = time.clock if qDuration > 0 else lambda: 0
qDuration = (qClock() + qDuration) if qDuration > 0 else 1

在Python 2.5引入了三元条件()之前,可以通过创建一个2元组元组来模拟它,并用布尔表达式对其进行索引,因为False被处理为0True1