round - python types




Wie kann man eine Zahl auf einen bestimmten Bereich begrenzen?(Python) (4)

Ich möchte eine Zahl auf einen bestimmten Bereich begrenzen. Momentan mache ich folgendes:

minN = 1
maxN = 10
n = something() #some return value from a function
n = max(minN, n)
n = min(maxN, n)

Dies hält es innerhalb von minN und maxN , aber es sieht nicht sehr nett aus. Wie könnte ich es besser machen?

PS: Ich benutze Python 2.6.


Könnten Sie einige einzeilige bedingte python Anweisungen nicht zusammenfassen?

Ich bin auf diese Frage gestoßen, als ich nach einer Möglichkeit suchte, pixel zwischen 0 und 255 zu begrenzen, und dachte nicht, dass die Verwendung von max() und min() sehr lesenswert war, also schrieb die folgende function :

def clamp(x, minn, maxx):
   return x if x > minm and x < maxx else (minn if x < minn else maxx)

Es würde mich interessieren zu sehen, wie jemand, der erfahrener ist als ich, diesen Weg findet, einen Wert festzuhalten. Ich nehme an, es muss weniger effizient sein als mit min() und max() , aber es kann nützlich sein für jemanden, der nach einer besser lesbaren (zumindest für mich) function sucht.


Definieren Sie eine Klasse und eine Methode zum Festlegen des Werts, der diese Validierungen durchführt.

Etwas wie das folgende:

class BoundedNumber(object):
    def __init__(self, value, min_=1, max_=10):
        self.min_ = min_
        self.max_ = max_
        self.set(value)

    def set(self, newValue):
        self.n = max(self.min_, min(self.max_, newValue))

# usage

bounded = BoundedNumber(something())
bounded.set(someOtherThing())

bounded2 = BoundedNumber(someValue(), min_=8, max_=10)
bounded2.set(5)    # bounded2.n = 8

numpy.clip() einfach numpy.clip() ( doc ):

n = np.clip(n, minN, maxN)

Es funktioniert auch für ganze Arrays:

my_array = np.clip(my_array, minN, maxN)

def clamp(n, minn, maxn):
    return max(min(maxn, n), minn)

oder funktionell gleichwertig:

clamp = lambda n, minn, maxn: max(min(maxn, n), minn)

jetzt verwendest du:

n = clamp(n, 7, 42)

oder mach es klar:

n = minn if n < minn else maxn if n > maxn else n

noch deutlicher:

def clamp(n, minn, maxn):
    if n < minn:
        return minn
    elif n > maxn:
        return maxn
    else:
        return n




min