Python的语法糖出错了

jak*_*451 2 python

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

qClock = (lambda:0, time.clock)[qDuration > 0]
qDuration = (1, (qClock() + qDuration))[qDuration > 0]
Run Code Online (Sandbox Code Playgroud)

我的过程:

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

eca*_*mur 8

这是编写三元条件的古老方式.它应该是:

qClock = time.clock if qDuration > 0 else lambda: 0
qDuration = (qClock() + qDuration) if qDuration > 0 else 1
Run Code Online (Sandbox Code Playgroud)

Python 2.5中,其引入的三元条件(前链路),你可以通过创建一个2元素的元组,并用一个布尔表达式索引它仿效它,由于False被作为经处理0True作为1.