Python语法糖出错了

时间:2014-02-03 17:19:57

标签: python

我正在查看列出的代码here,它们提供了一个非常有趣的结构,可以在线编写Python中的“时钟”。我以前从未见过这种古怪的语法,老实说,不知道它是如何工作的。这在Python中是完全黑魔法。但即使它不是写作者想要的最恐怖的方式,我仍然想知道它是如何运作的。

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

我的过程:

  • qClock返回True表示已通过的持续时间
  • qDurration以int开头,但后来改为lambda函数?
  • 为什么每个列表末尾都有列表?我觉得这些不是清单。

2 个答案:

答案 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} }和0True

答案 1 :(得分:4)

在Python中,boolint的子类,因此布尔值为0或1,具体取决于它是值FalseTrue

因此,qClock设置为lambda: 0time.clock,具体取决于qDuration是否大于0。

然后将

qDuration设置为1qClock() + qDuration

您可以将其翻译为:

qDuration = time.clock() + qDuration if qDuration else 1

更短,更易读。去图。