math.isinf()测试阳性或阴性无穷大集中在一起。什么是pythonic方式明确地测试它们?
测试正无穷大的方法:
x == float('+inf')
math.isinf(x) and x > 0
测试负无穷大的方法:
x == float('-inf')
math.isinf(x) and x < 0
反汇编方式1:
>>> def ispinf1(x): return x == float("inf")
...
>>> dis.dis(ispinf1)
1 0 LOAD_FAST 0 (x)
3 LOAD_GLOBAL 0 (float)
6 LOAD_CONST 1 ('inf')
9 CALL_FUNCTION 1
12 COMPARE_OP 2 (==)
15 RETURN_VALUE
反汇编方式2:
>>> def ispinf2(x): return isinf(x) and x > 0
...
>>> dis.dis(ispinfs)
1 0 LOAD_GLOBAL 0 (isinf)
3 LOAD_FAST 0 (x)
6 CALL_FUNCTION 1
9 JUMP_IF_FALSE_OR_POP 21
12 LOAD_FAST 0 (x)
15 LOAD_CONST 1 (0)
18 COMPARE_OP 4 (>)
>> 21 RETURN_VALUE
This answer似乎偏向Way 2,除了x> 0。
答案 0 :(得分:16)
&#34; pythonic&#34;方法是使用可读和可维护的东西。
尽管如此,x == float("inf")
和x == float("-inf")
对我来说更具可读性,我更喜欢它们。 math.isinf(x) and x > 0
速度更快,但每次调用仅约40 纳秒。
因此,除非您检查了大量数字,否则不会对运行时间产生太大影响。
答案 1 :(得分:4)
还有numpy
>>> import numpy as np
>>> np.isneginf([np.inf, 0, -np.inf])
array([False, False, True], dtype=bool)
>>> np.isposinf([np.inf, 0, -np.inf])
array([ True, False, False], dtype=bool)
然后有一般isinf
>>> np.isinf([np.inf, 0, -np.inf])
array([ True, False, True], dtype=bool)