У меня есть цепочка функций, каждая из которых определена в другом месте класса:
fus(roh(dah(inp)))
где inp
- либо словарь, либо bool(False)
.
Желаемый результат состоит в том, что если inp
или любая из функций, оцененных в False
, False
возвращается стеком функций.
Я попытался использовать тернарные операторы, но они не оцениваются правильно.
def func(inp):
return int(inp['value']) + 1 if inp else False
выдает TypeError, bool не подлежит расшифровке, если i == False
, потому что inp['value']
оценивается перед условным.
Я знаю, что могу сделать это явно:
def func(inp):
if inp == False:
return False
else:
return inp['value'] + 1
но есть тонна функций, и это будет почти четверть длины моего кода. Он также переписывает одни и те же строки кода снова и снова, что говорит мне о том, что это неправильный способ сделать что-то.
Я подозреваю, что декоратор с аргументами является ответом, но чем больше я играю с ним, тем менее я уверен в этом.
def validate_inp(inp):
def decorator(func):
def wrapper(*args):
return func(inp) if inp else False
return wrapper
return decorator
@validate_inp(inp)
def func(inp):
return int(inp['value']) + 1
К сожалению, вызов декоратора вызывает значение NameError, 'inp' не определен. Но я не уверен, что неправильно использую декоратор, или декоратор - неправильное решение.
Ищите комментарий, критику, предложение и/или проверку здравомыслия.
Если вы нашли это, пытаясь решить вашу собственную проблему...
Вероятно, вы хотите использовать пустые словари вместо логического False. Подставки к @chepner.
В моем приложении использование False было "нормально", не предлагало никаких преимуществ и вызывало некоторые короткие блоки кода.
Я нашел, что все проще, используя пустой словарь. Я обертываю функции, которые используют dict с декоратором, который улавливает KeyError, созданный ссылкой dict['value']
, где dict
пуст.