わかりましたので、可変数の入力を取り、それぞれをクランプする関数を定義しています
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
これは、Python のリストのタプルへの自動アンパックを利用します。私が抱えている問題は、引数を 1 つだけ指定すると、Python がリストからそれをアンパックせず、float の代わりにリストを取得することです。これは面倒です。
print clamp(a)
>> [0.2]
これまでの私の解決策は、リストの長さを確認し、要素が1つしかない場合はインデックスを付けることです:
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]
私の質問は、これを行うためのより慣用的な方法はありますか?