本篇阅读的代码实现了将一个数限制在指定范围内的功能,如果这个数在另外两个数所指定的范围内,将保持自己的值,否则返回离这个数最近的值。
本篇阅读的代码片段来自于30-seconds-of-python。
clamp_number
def clamp_number(num,a,b):
return max(min(num, max(a, b)), min(a, b))
# EXAMPLES
print(clamp_number(2, 3, 5)) # 3
print(clamp_number(1, -1, -5)) # -1
clamp_number
函数接收一个需要被限制的数num
,以及表示返回的两个数a
和b
,返回限制的结果。
区别于多次使用if
条件语句,该函数组合使用max
和min
函数求取限制的结果。
代码的逻辑是先求取a
和b
的最大值,再和num
求取最小值。这个最小值再和a
、b
之间的最小值比较取最大值。
max(a, b)
这一步计算求出指定范围的上限α
。min(num, α)
这一步在指定数值和范围的上限中求最小值。只有指定的数值超过范围上限的时候,返回值为α
,其他情况返回num
。min(a, b)
这一步计算出指定返回的下限β
。最后一步有两种情况,分别是
max(α, β)
和max(num, β)
。- 当
num
超过范围上限时,最后一步为max(α, β)
。此时返回范围上限α
,是整个取值范围内最接近num
的值。 - 当
num
没有超过范围上限时,最后一步为max(num, β)
。此时如果num
在取值范围内,就会大于范围下限β
,返回num
。如果num
小于范围下限β
,则返回β
,是整个取值范围内最接近num
的值。
- 当