1

threading.timer你传递一个函数的名称(下面的例子)。是否可以用函数体替换它,所以我不必费心定义另一个微不足道的函数

def PulseLed(self):
    GPIO.output(26, GPIO.HIGH)
    self.ledTimer = threading.Timer(1, self.TurnOffLed)
    self.ledTimer.start()

def TurnOffLed(self):
    GPIO.output(26, GPIO.LOW)
4

4 回答 4

6

Python 的语法不允许在参数列表中包含语句。但是,您通常可以使用 a lambda,例如:

threading.Timer(1, lambda: GPID.output(26, GPIO.LOW))

过度使用,这会导致代码不可读。如果您开始将多个x if b else y子句填充到您的 lambda 中,您就知道它是“过度使用的”;-)

于 2013-09-25T23:58:38.487 回答
2
self.ledTimer = threading.Timer(1, lambda: GPIO.output(26, GPIO.LOW))
于 2013-09-25T23:56:28.823 回答
2

我总是偏爱partial

from functools import partial

def PulseLed(self):
    GPIO.output(26, GPIO.HIGH)
    self.ledTimer = threading.Timer(1, partial(GPIO.output, 26, GPIO.LOW))
    self.ledTimer.start()
于 2013-09-25T23:58:28.440 回答
2

在很多情况下,我喜欢“微不足道的功能”;但是,我会写它类似于以下内容。我发现使用局部函数 - 就像使用局部变量一样 - 可以将“自我文档”添加到代码中。

def PulseLed(self):
    def tunOffLed():
        GPIO.output(26, GPIO.LOW)
    GPIO.output(26, GPIO.HIGH)
    self.ledTimer = threading.Timer(1, turnOffLed)
    self.ledTimer.start()

(甚至可能将另一个 GPIO 调用放在一个turnOnLed函数中。)

于 2013-09-26T00:09:30.873 回答