передача переменной функции прослушивателя клавиатуры pynput

#python #pynput

#python #pynput

Вопрос:

У меня возникла проблема с передачей переменной count функции on_press, которая вызывается при каждом нажатии клавиши с использованием библиотеки прослушивателя pynput. Я не понимаю, почему переменная не увеличивается, а затем выводится на экран. Он увеличивает и выводит на первой итерации, но не на следующей. Я в замешательстве, пожалуйста, помогите.

 from pynput.keyboard import Listener
import string

count = 0 

def on_press(count):
    count  = 1
    print(count)

with Listener(on_press=on_press(count)) as listener:
    listener.join()
 

Ответ №1:

Проблема здесь связана с темой области видимости переменной. count Переменная, на которую ссылаются внутри on_press , является count аргументом, передаваемым в функцию (а не глобальной переменной count , определенной вне функции). Целые числа в Python передаются путем копирования в функцию (не по ссылке). Итак, что происходит в вашем коде, так это то, что вы создаете копию глобальной переменной count , передаете ее в on_press , а затем on_press только увеличиваете локальную копию count переданной в — следовательно, она всегда будет печатать 1.

Если вы хотите, чтобы количество увеличивалось при каждом вызове on_press, вы должны напрямую увеличивать глобальную переменную count следующим образом:

 from pynput.keyboard import Listener
import string

count = 0 

def on_press():
    global count
    count  = 1
    print(count)

with Listener(on_press=on_press()) as listener:
    listener.join()
 

Комментарии:

1. Использование этого метода объявления глобального количества внутри функции и его увеличения делает то же самое, что и раньше, только печатая 1 и не печатая ничего другого. Я тоже пытался с этим повозиться, и, похоже, ничего не работает