我想将数字限制在一定范围内。目前,我正在做以下事情:
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)
或功能等效:
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
只需使用
numpy.clip()
(doc):
n = np.clip(n, minN, maxN)
它也适用于整个数组:
my_array = np.clip(my_array, minN, maxN)
如果你想变得可爱,你可以这样做:
n = sorted([minN, n, maxN])[1]
定义一个类并提供一个方法来设置执行这些验证的值。
有点像下面这样:
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
条件语句串在一起吗?我在寻找一种方法来限制
pixel
和 0
之间的 255
值时遇到了这个问题,并且不认为使用 max()
和 min()
非常可读,所以写了以下 function
:
def clamp(x, minn, maxx):
return x if x > minn and x < maxx else (minn if x < minn else maxx)
我很想知道比我更有经验的人会如何找到这种固定值的方式。我认为它一定比使用
min()
和 max()
效率低,但对于寻找更具可读性的人来说可能很有用 (至少对我来说) function
。