ivanzzzz
Есть данные и их иногда по разному нужно обрабатывать. Хочу сделать, что-то подобное плагинам чтобы-постоянно код не менять. Подключил например плагин на фильтрацию данных длинна, которых меньше 10 и он работает, не надо отключил и все. Есть примеры такой реализации?
Первое, что приходит в голову, это запилить декоратор, который срабатывает при наличии соответствующего ключа в конфиге или по какому-то другому условию. Типа такого
def filter_func(data, length=10):
return [d for d in data if len(d) >= length]
def capitalize(data):
return [d.capitalize() for d in data]
PLUGINS = {"filter": filter_func,
"capitalize": capitalize}
def plugin(name, *plugin_args, **plugin_kwargs):
def decorator(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
if name in PLUGINS:
result = PLUGINS[name](result, *plugin_args, **plugin_kwargs)
return result
return wrapper
return decorator
@plugin("capitalize")
@plugin("filter", length=5)
def target():
return ["eefqawefwefasdfasdfadfasdf", "dsa", "esadasdassda"]
print target()