Python的语法错误了

2024-10-03 04:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在查看列出的代码here,它们为用Python在线编写“时钟”提供了一个非常有趣的结构。我以前从未见过这种奇怪的语法,我也不知道它是如何工作的。这完全是Python的黑魔法。但即使这不是写作者意图的最具Python风格的方式,我还是想知道它是如何运作的。你知道吗

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

我的思考过程:

  • qClock如果持续时间已过,则返回True
  • qDurration以int开头,但后来改为lambda函数?你知道吗
  • 为什么在每一个后面都有一个列表?我觉得这些不是名单。你知道吗

Tags: lambda代码heretime风格过程方式语法
2条回答

在Python中,boolint的子类,因此布尔值是0还是1取决于它是值False还是True。你知道吗

因此,根据qDuration是否大于0,将qClock设置为lambda: 0time.clock。你知道吗

qDuration然后设置为1qClock() + qDuration。你知道吗

您可以将其转换为:

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

它更简短,可读性更强。想想看。你知道吗

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

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

在python2.5引入三元条件(link)之前,您可以通过创建一个2元素元组并用布尔表达式索引来模拟它,因为False被视为0,而True被视为1。你知道吗

相关问题 更多 >