#python #python-3.x #schedule
#python #python-3.x #Расписание
Вопрос:
Этот фрагмент кода ведет себя не так, как я ожидал: вместо печати 1, 2, 3, …; код возвращает только случайные числа (я пытался закрыть все и перезапустить его, но он всегда выдает случайные числа.)
import schedule
import time
a = 0
def count_fun():
global a
for i in range(1000):
a = i
return a
def print_a():
print(a)
schedule.every(3).seconds.do(count_fun)
schedule.every(3).seconds.do(print_a)
while True:
schedule.run_pending()
Ответ №1:
Он не печатает случайные числа, он печатает k * sum(range(1000)
для k
in 1, 2, 3, …
Ваше ожидание, что это должно печатать целые числа 1, 2, 3 и т.д., неверно. a
не увеличивается на 1 на каждой итерации, оно обновляется значением sum(range(1000))
на каждой итерации. Каждый раз выполняется весь цикл for.
Запуск кода, который у вас здесь, выводит
499500
999000
1498500
1998000
Некоторая быстрая арифметика должна подтвердить, что разница между последовательными элементами существует 499500
, или sum(range(1000))
.
Комментарии:
1. Спасибо за ваш ответ! Это имеет смысл. Есть ли у вас какие-либо предложения относительно того, что попытаться заставить код печатать 1, 2, 3 и т.д.? Я попытался переписать функцию, используя
yield
, а затем выполнитьnext
с помощью schedule, но, похоже, это не сработало.2. Чтобы напечатать эту последовательность чисел, вам нужно просто назначить
a
, а не добавлять к ней. Т.е.a = i
внутри цикла.=
добавление на месте.