#python #python_3x #async_await #асинхронность
Есть вот такой простой код на javascript:
function Counter () {
this.count = 0;
setInterval(() => this.count++, 1000);
}
var counter = new Counter();
Каждый раз когда я вызываю counter, я получаю значение, которое раз в 1 секунду увеличивается
на 1.
Как написать аналогичную функцию в python?
Если я пробую что-то вроде:
def counter():
counter = 0
while counter < 1000:
counter += 1
sleep(1)
return counter
c = counter()
То терминал занят и я не могу получить значение.
А если же так:
def counter():
counter = 0
while counter < 1000:
counter += 1
sleep(1)
return counter
c = counter()
то c всегда равен 1
Ответы
Ответ 1
import time def counter(): start = time.time() while True: yield int(time.time() - start) c = counter() print(next(c)) time.sleep(2) print(next(c)) time.sleep(1) print(next(c))Ответ 2
Чтобы получить целое количество секунд прошедших с момента создания counter: import math import time def counter(): return lambda start=time.monotonic(): math.floor(time.monotonic() - start) Пример, где пауза между вызовами: >>> c = counter() >>> c() 1 >>> c() 4 >>> c() 8 Если хочется посмотреть как аналог setTimeout, setInterval из JavaScript в Питоне реализовать, то примеры для разных библиотек: threading, tkinter, gtk, twisted, asyncio.Ответ 3
Используйте itertools.count(): import itertools counter = itertools.count() Затем всякий раз, когда будет нужно следующее число, используйте next(counter) (например next_id = next(counter)) так как counter просто итератор. Примечание: itertools.count() позволяет использовать ключевые параметре start и/или step, например itertools.count(start=100, step=10) выдает значения 100, 110, 120, ...
Комментариев нет:
Отправить комментарий