Python, как избавиться от перечисления всех вариантов if-else в функции?
Есть скрипт, который запускается с параметрами, код в нем подобен коду, который я привел ниже. Как правильно сделать так, чтобы я мог задавать параметры одновременно, при этом не перечисляя все варианты в условиях if-else? Допустим, хочу вызвать main, чтобы вывелось полная фраза Hello my world, при этом не писать if a and b and c: print("Hello my world")
def method_a():
print("Hello")
def method_b():
print("my")
def method_c():
print("world!")
def main(a=None,b=None,c=None):
if a:
method_a()
elif b:
method_b()
elif c:
method_b()
main(a=1, b=2, c=3)
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Ну, например, можно сделать так:
def method_a():
print("Hello")
def method_b():
print("my")
def method_c():
print("world!")
def main(a=None,b=None,c=None):
d = {a:method_a, b:method_b, c:method_c}
[d[x]() for x in d.keys() if x]
теперь для
main(a=1, b=2, c=3)
получаем
Hello
my
world!
а для
main(b=2, c=3)
соответственно
my
world!
Автор решения: Andy Pavlov
→ Ссылка
Можно все методы объединить в один словарь, а параметры на входе собрать через kwargs. Дальше проверяем вхождение параметров в ключи словаря с функциями, которые по нему вызываем.
def method_a():
print("Hello")
def method_b():
print("my")
def method_c():
print("world!")
def methods(**kwargs):
funcs = {'a': method_a, 'b': method_b, 'c': method_c}
for k in kwargs:
funcs[k]() if kwargs[k] else None
methods(a=1, b=1, c=3)
Вывод:
Hello
my
world!