在button.when_pressed中返回参考函数的值

问题描述 投票:0回答:2

我正在尝试将函数的返回值存储在变量中。按下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物体。

python raspberry-pi gpiozero
2个回答
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

0
投票

只是一个修复。您可以在函数中使用global来分配给i。从信号导入暂停中看到gpiozero import下面的示例代码

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()只打印用于评估的值,因此您可以将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.