2016-08-08 40 views
0

habe ich eine Funktion, und ich möchte in der Lage sein, um es von keyworded-Parametern mit einem Satz zu nennen, die ich **criterias nennen:Python - Pass einen Bereich des Schwimmers (ohne Stufe) als Argument einer Funktion

def actionBasedOnParameters(**criterias): 
    # my code 

Innerhalb dieser Reihe von Parametern wird einer von ihnen 'SumInc' genannt und ich würde gerne einen Bereich zu ihm übergeben. Der Bereich wird die Form von [1:15] oder [1:] oder [: 15] haben. Etwas, das mich im Wesentlichen prüfen lässt, ob eine Variable in meinem Code größer als eine bestimmte Grenze oder niedriger als eine andere Grenze oder beides ist. In der gleichen Weise, wie diese Zeilen Code tun:

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 

Aber ich bin auf der Suche nach einem sauberere Weg, um beiden Grenzen zu passieren, ohne einen Parameter für jeden erstellen zu müssen und viele, wenn die Bedingungen um Dinge zu erledigen.

Etwas, das würde wie folgt aussehen:

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 

Gibt es etwas dieser Art vorhanden?

Danke für Ihre Tipps,

+0

Sie könnten ein ['slice'] (https://docs.python.org/3/library/functions.html#slice) Objekt übergeben. – fenceop

+0

Wie würde ich dann überprüfen, dass meine Variable innerhalb dieser Scheibe ist? Vor allem, wenn es nur eine Grenze gibt. Nehmen wir an, ich setze es als criteria = dict (SumInc = slice (None, 15)) –

+0

Sie können auf die Attribute 'start' und 'stop' zugreifen und anhand der angegebenen Grenzen entscheiden, welcher Vergleich durchgeführt werden soll. – fenceop

Antwort

2

So etwas wie das?

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)) 

Auch sollten Sie besser 'SumInc' in criterias anstelle von criterias['SumInc'] is not None weil in Ihrem Fall, wenn es keine 'SumInc' ist, wird es Ihnen eine KeyError Ausnahme ausgelöst.