我正在查看列出的代码here,它们提供了一个非常有趣的结构,可以在线编写Python中的“时钟”。我以前从未见过这种古怪的语法,老实说,不知道它是如何工作的。这在Python中是完全黑魔法。但即使它不是写作者想要的最恐怖的方式,我仍然想知道它是如何运作的。
qClock = (lambda:0, time.clock)[qDuration > 0]
qDuration = (1, (qClock() + qDuration))[qDuration > 0]
我的过程:
qClock
返回True表示已通过的持续时间qDurration
以int开头,但后来改为lambda函数?答案 0 :(得分:8)
这是编写三元条件的古老方式。它应该是:
qClock = time.clock if qDuration > 0 else lambda: 0
qDuration = (qClock() + qDuration) if qDuration > 0 else 1
在引入三元条件(link)的Python 2.5之前,您可以通过创建一个2元素元组并使用布尔表达式对其进行索引来模拟它,因为False
被视为{{1} }和0
为True
。
答案 1 :(得分:4)
在Python中,bool
是int
的子类,因此布尔值为0或1,具体取决于它是值False
或True
。
因此,qClock
设置为lambda: 0
或time.clock
,具体取决于qDuration
是否大于0。
qDuration
设置为1
或qClock() + qDuration
。
您可以将其翻译为:
qDuration = time.clock() + qDuration if qDuration else 1
更短,更易读。去图。