#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 и не печатая ничего другого. Я тоже пытался с этим повозиться, и, похоже, ничего не работает