Возвращаемое значение эталонной функции в button.when_pressed - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь получить возвращаемое значение функции, хранящейся в переменной. Функция вызывается (по ссылке), когда нажата кнопка 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()

При нажатии кнопки будет напечатано 1 и 2, как и ожидалось.

Но как я могу сохранить возвращаемое значение fcn в i, чтобы оно могло увеличиваться при каждом нажатии кнопки?

Edit: причина, по которой я начал со справки 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 голосов
/ 14 апреля 2019

Просто исправить.Вы можете использовать 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», относится к переменной внешней области видимости.тогда вы можете сделать что угодно с этой переменной ... function check () просто печатает значение для оценки, поэтому вы можете удалить его.

0 голосов
/ 14 апреля 2019

Назначить 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
...