Я хочу сделать функцию гибкой в отношении распаковки количества входных переменных.
Более конкретно, например, у меня есть следующее:
def flexi_func(vars):
func_var_a, func_var_b, func_var_c, func_var_d = vars
#do something
my_vars = [var_a, var_b, var_c, var_d]
flexi_func(my_vars)
Это прекрасно работает, если число входных переменных равно 4. Но, скажем, я хочу, чтобы одна и та же функция работала только с тремя или двумя входными переменными. Предположим, что бит «сделать что-то» уже гибкий. Затем, чтобы распаковать переменные, я могу написать
def flexi_func(vars):
if len(vars) == 4:
func_var_a, func_var_b, func_var_c, func_var_d = vars
elif len(vars) == 3:
func_var_a, func_var_b, func_var_c = vars
elif len(vars) == 2:
func_var_a, func_var_b = vars
#do something
И это тоже отлично работает. Мне это кажется немного неуклюжим, особенно если бы у меня было N> 4 переменных. Есть ли более чистый, более Pythonic способ распаковать кортеж таким образом, чтобы я мог использовать распакованные переменные?
Я знаю по этот вопрос Я могу сделать что-то вроде этого (в Python 3):
foo, bar, *other = func()
но мне нужно было бы проделать больше работы для доступа к материалу в other
, так что это не лучше, чем мой if...elif...
подход.