@artem78

Как передать параметр через лямбда-функцию?

Функция set_interval создаёт таймер, который запускает пользовательскую функцию раз в n секунд. Нужно передать в него функцию с параметром.

import threading
from random import uniform

t = None # Перемнная с таймером

def set_interval(func, sec):
	"""
	Создаёт таймер
	"""
	global t
	def func_wrapper():
		set_interval(func, sec)
		func()
	t = threading.Timer(sec, func_wrapper)
	t.start()
	return t

def stop_position():
	"""
	Останавливает таймер
	"""
	global t
	if t is not None:
		t.cancel()
		t = None

def position(callback):
	"""
	Запускает вызов пользовательской функции раз в секунду
	"""
	global t
	t = set_interval(lambda: do_callback(callback), 1)

def do_callback(callback):
	"""
	Генерирует данные и передаёт в принимающую функцию
	"""
	data = {
		'latitude': uniform(54.0, 56.0),
		'longitude': uniform(35.0, 38.0),
		'altitude': uniform(200, 250),
		'vertical_accuracy': uniform(5, 20),
		'horizontal_accuracy': uniform(5, 40),
	}
	callback(data)



#Test
def foo(data):
	print(data)

position(foo)


Пишет ошибку:
TypeError: <lambda>() takes exactly 1 argument (0 given)


Питон 2.7
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы