如何限制一个数字在一个指定的范围内? (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用户可能会有用。