如何限制一个数字在一个指定的范围内? (python)

我想限制一个数字在一定范围内。 目前,我正在做以下工作:

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

这保持在minNmaxN ,但它看起来不是很好。 我怎么能做得更好?

PS:仅供参考,我正在使用Python 2.6。

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

    或function上等同:

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

    现在,你使用:

     n = clamp(n, 7, 42) 

    或者说清楚:

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

    更清晰:

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

    如果你想要可爱,你可以这样做:

     n = sorted([minN, n, maxN])[1] 

    简单地使用numpy.clip() ( doc ):

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

    它也适用于整个数组:

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

    定义一个类,并有一个方法来设置执行这些validation的值。

    有点像下面的东西:

     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 

    你能不能把一些单行python条件语句串起来?

    当我find一个限制0255之间的pixel值的方法时,遇到了这个问题,并没有认为使用max()min()是非常可读的,所以写了下面的function

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

    我会感兴趣的是看看比我更有经验的人会如何find这种价值的钳制。 我认为它必须比使用min()max()更低效,但对于寻找更可读性(至less对我而言) function用户可能会有用。