按钮中引用函数的返回值。

时间:2019-04-14 10:13:09

标签: python raspberry-pi gpiozero

我正在尝试将函数的返回值存储在变量中。按下Raspberry Pi gpiozero按钮时,将调用该函数(由引用调用)。

from gpiozero import Button
from signal import pause

def fcn(a):
    print(a)
    b = a + 1
    print(b)
    return b

btn = Button(26)

i = 1
btn.when_activated = lambda: fcn(i) # returns 2

pause()

按下按钮时,将按预期打印12

但是如何将fcn的返回值存储到i中,以便在每次按下按钮时都可以递增?

编辑:我从when_activated引用开始的原因是,在我的主脚本中,我有多个按钮和多个功能,可以按任意顺序按下它们,并且应该相互传递变量。像这样:

def fcn(a):
    b = a + 1
    return b

def fcn2(b):
    c = b + 10
    return c

btn1 = Button(26)
btn2 = Button(19)

i = 1
btn1.when_activated = lambda: fcn1(i) # returns i + 1
btn2.when_activated = lambda: fcn2(i) # returns i + 10

实际上,我还传递了datetime个对象。

2 个答案:

答案 0 :(得分:0)

每次按下按钮时,将i的值分配给fcn(i)

def fcn(a):
    print(a)
    b = a + 1
    print(b)
    return b

i = 1
while 1:
    input() # Button press
    i=fcn(i) # Incrementation

答案 1 :(得分:0)

只需修复即可。您可以在函数中使用global来分配给i。请参阅下面的示例代码     从gpiozero导入按钮     从信号导入暂停起

def fcn():
    global i
    i = i + 1
    check()
    return b #No need of returning


def check():
    print i


btn = Button(26)

i = 1
btn.when_activated = lambda: fcn() # returns 2

pause()

global告诉解释器该变量,在这种情况下为“ i”与外部作用域的变量有关。如果您可以使用该变量进行任何操作... check()函数仅会打印要评估的值,因此可以将其删除。