Python 如果输入低于0.0或高于1.0,则返回0.0和1.0
目标是在输入值介于(0.0,1.0)之间时“做点什么” 否则,Python 如果输入低于0.0或高于1.0,则返回0.0和1.0,python,if-statement,floating-point,idioms,Python,If Statement,Floating Point,Idioms,目标是在输入值介于(0.0,1.0)之间时“做点什么” 否则, 如果输入大于等于1.0或 如果输入则返回0.0如果愿意,可以使用decorator样式 装饰器(具有自定义的最小值和最大值): 或者,您可以使用一个简单的装饰器(具有预定义的限制): 它不应该是返回做某事(x)?另外,为什么不让做某事来决定呢?这样代码会更干净。@NickChapman的可能副本这不是钳制,因为条件取决于输入,而不是结果。是的,但如果输入高于1.0,很容易检测,但如果低于0,则正方形将使其在(0.0,1.0)范围内
- 如果输入大于等于1.0或
- 如果输入则返回0.0如果愿意,可以使用decorator样式
装饰器(具有自定义的最小值和最大值):
或者,您可以使用一个简单的装饰器(具有预定义的限制):
它不应该是
?另外,为什么不让返回做某事(x)
来决定呢?这样代码会更干净。@NickChapman的可能副本这不是钳制,因为条件取决于输入,而不是结果。是的,但如果输入高于1.0,很容易检测,但如果低于0,则正方形将使其在(0.0,1.0)范围内,这是不需要的输出。为什么要通过将简单逻辑隐藏在装饰器中来掩盖它?@Sneftel如果你一直使用这种方法,它并不会掩盖逻辑。如果您只做了一次,那么我同意使用decorator比在函数中添加逻辑更烦人。但是如果你打算用不同的函数重复10次,那么装饰器是处理这个问题的好方法。@Sneftel他要求的是代码风格,而不是解决方案。我相信它在某些情况下是有用的。如果它被使用一次,我同意有更短的方法。做某事
def func(x): if x >= 1.0: return 1.0 elif x <= 0.0: return 0.0 else: return do_something(x)
def func(x): if 0 < x < 1.0: return do_something(x) else: return max(min(x, 1.0), 0.0)
def do_something(x): return x**2
>>> x = 0.231 >>> 0 < x < 1.0 True
>>> x**2 0.053361000000000006 >>> 0 < x**2 < 1.0 True
>>> x = 0.231 >>> max(min(x**2, 1.0), 0.0) 0.053361000000000006
>>> x = -0.231
>>> x = - 0.231 >>> max(min(x**2, 1.0), 0.0) 0.053361000000000006
def do_something(x): ratio_y, score_y = 1.5, 0.5 beta = math.log(score_y) / math.log(score_y)**2 return math.exp(beta * math.log(x)**2)'
def limit_decorator(min_val, max_val): def inner_decorator(func): def wrapping_func(x): if x >= max_val: return max_val elif x <= min_val: return min_val else: return func(x) return wrapping_func return inner_decorator
@limit_decorator(0.0, 1.0) def do_something(value): return value**2
def limit_decorator(func): def wrapping_func(x): if x >= 1.0: return 1.0 elif x <= 0.0: return 0.0 else: return func(x) return wrapping_func
@limit_decorator def do_something(value): return value**2