2016-08-08 5 views
0

をフロートの範囲を渡し:パイソン - 私は関数を作成し、私は<code>**criterias</code>を呼び出すキーワードとして、パラメータのセットでそれを呼び出すことができるようにしたい関数の引数として(ステップなし)

def actionBasedOnParameters(**criterias): 
    # my code 

これらのパラメータのうちの1つは「SumInc」と呼ばれ、範囲を渡したいと思います。範囲は[1:15]または[1:]または[:15]の形式になります。基本的には、コード内の変数が特定の境界よりも大きいか、別の境界より低いか、あるいはその両方かどうかをチェックすることができます。コードのこれらの行が行うのと同様に 、:

In [188]: 1 <= 15.98877 <= 15 
Out[188]: False 

In [188]: 1 <= 15.98877 
Out[188]: True 

In [188]: 15.98877 <= 15 
Out[188]: False 

しかし、私は条件が物事を成し遂げるためにならばそれぞれ、多くのパラメータを作成することなく、両方の境界を渡すために滑らかな印象の方法を探しています。このようになります

何か:

In [189]: criterias = dict(SumInc=[:15]) 

def actionBasedOnParameters(**criterias): 
    if criterias['SumInc'] is not None: 
     if my_variable is in criterias['SumInc']: 
      #action1 
     else: 
      #action2 

既存のこの種のようなものはありますか?

ヒントありがとうございました

+0

['slice'](https://docs.python.org/3/library/functions.html#slice)オブジェクトを渡すことができます。 – fenceop

+0

変数がそのスライス内にあることを確認する方法はありますか?特に境界が1つだけの場合は特にそうです。私はそれをcriterias = dict(SumInc = slice(None、15))として設定します。 –

+0

'start'と' stop'属性にアクセスして、提供された境界に基づいてどのような比較を行うかを決定できます。 – fenceop

答えて

2

これはなんですか?それはあなたのKeyError例外が発生します何'SumInc'がない場合

criterias = dict(SumInc=(1,15)) 

def actionBasedOnParameters(**criterias): 
    if 'SumInc' in criterias: 
     lower, upper = criterias['SumInc'] 
     if lower <= my_variable <= upper: 
      #action1 
     else: 
      #action2 

infinity = float('inf') 
actionBasedOnParameters(SumInc=(1, 15)) 
actionBasedOnParameters(SumInc=(-infinity, 15)) 
actionBasedOnParameters(SumInc=(1, infinity)) 

また、あなたはより良いので、あなたのケースで'SumInc' in criterias代わりのcriterias['SumInc'] is not Noneを使用すると思います。

関連する問題