如何限制一个数字在一个指定的范围内? (python)
我想限制一个数字在一定范围内。 目前,我正在做以下工作:
minN = 1 maxN = 10 n = something() #some return value from a function n = max(minN, n) n = min(maxN, n)
这保持在minN
和maxN
,但它看起来不是很好。 我怎么能做得更好?
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一个限制0
到255
之间的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
用户可能会有用。
- 在C ++中预增量比后递增快 – true? 如果是的话,为什么呢?
- 如何避免在replace所有元素或添加元素集时多次触发ObservableCollection.CollectionChanged