Распаковка списка переменной длины, возвращаемого функцией
Хорошо, яопределяя функцию, которая принимает переменное количество входов и зажимает каждый из них
def clamp(*args):
return [ max(min(arg, 0.8), 0.2) for arg in args]
Мне нравится удобочитаемость этой функции:
a = 0.12
b = 0.45
c = 0.992
A,B,C = clamp(a,b,c)
print A,B,C
>> 0.2, 0.45, 0.8
Это использует Pythons автоматическая распаковка списков в кортежи. Проблема в том, что если я приведу только один аргумент, Python неt распаковать его из списка, и я получаю список вместо float, что раздражает.
print clamp(a)
>> [0.2]
Мое решение пока состоит в том, чтобы проверить длину списка и проиндексировать его, если есть только один элемент:
def clamp(*args):
result = [ max(0.2, min(0.8,arg)) for arg in args]
return result if len(result) > 1 else result[0]
a = 0.12
print clamp(a)
>> [0.2]
У меня вопрос, есть ли более идиоматический способ сделать это?