Mth Clv
Mth Clv

Reputation: 667

Python - Pass a range of float (without step) as an argument of a function

I created a function and I would like to be able to call it with a set of keyworded-parameters that I call **criterias:

def actionBasedOnParameters(**criterias):
    # my code

Inside this set of parameters one of them will be called 'SumInc' and I would like to pass a range to it. The range will be of the form of [1:15] or [1:] or [:15]. Something that will essentially let me check whether a variable in my code is greater than a certain boundary or lower than another boundary or both. In the same way, as these lines of codes do:

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

But I am looking for a neater way to pass both boundaries without having to create a parameter for each and many if conditions to get things done.

Something that would look like this:

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

Is there something of this kind existing?

Thanks for your tips,

Upvotes: 0

Views: 297

Answers (1)

akarilimano
akarilimano

Reputation: 1074

Something like this?

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

Also, you'd better use 'SumInc' in criterias instead of criterias['SumInc'] is not None because in your case if there is no 'SumInc' it will raise you a KeyError exception.

Upvotes: 2

Related Questions