1

わかりましたので、可変数の入力を取り、それぞれをクランプする関数を定義しています

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]

私の質問は、これを行うためのより慣用的な方法はありますか?

4

5 に答える 5