您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么Python没有符号功能?

为什么Python没有符号功能?

确实,数学中包含一个补丁,但未被接受,因为他们在所有极端情况下(+/- 0,+ /-nan等)均未就应返回的内容达成共识。sign()

因此,他们决定仅实施copysign,尽管可以使用它(尽管更为冗长),才能将最终情况下所需的行为委托给最终用户-有时可能需要调用cmp(x,0)

我不知道为什么它不是内置的,但我有一些想法。

copysign(x,y):
Return x with the sign of y.

最重要的copysign是,是的超集signcopysignx = 1的调用sign函数相同。因此,您可以使用它,copysign不必理会它

>>> math.copysign(1, -4)
-1.0
>>> math.copysign(1, 3)
1.0

如果您厌倦了传递两个完整的参数,则可以采用sign这种方式来实现,它仍将与其他人提到的IEEE兼容:

>>> sign = functools.partial(math.copysign, 1) # either of these
>>> sign = lambda x: math.copysign(1, x) # two will work
>>> sign(-4)
-1.0
>>> sign(3)
1.0
>>> sign(0)
1.0
>>> sign(-0.0)
-1.0
>>> sign(float('nan'))
-1.0

其次,通常,当您需要某物的符号时,您最终会将其乘以另一个值。当然,基本上就是copysign这样。

因此,代替:

s = sign(a)
b = b * s

您可以这样做:

b = copysign(b, a)

是的,我很惊讶您已经使用Python 7年了,认为cmp可以如此轻松地将其删除并替换为sign!您是否从未使用__cmp__方法实现类?您是否从未调用cmp和指定自定义比较器函数

总而言之,我发现自己也想要一个sign函数,但是copysign一个参数为1就可以了。我不同意这样做sign会比有用copysign,因为我已经证明它只是相同功能的一部分。

python 2022/1/1 18:27:55 有188人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶