使用“==”或作为布尔值将数字与零进行比较之间是否存在相当大的差异?
Is there a considerable difference between comparing a number to zero with "==" or as a bool?
在python之间进行比较的方式是否有区别:
if x == 0.0:
print "x is zero"
和
if not x:
print "x is zero"
这会让一个人更喜欢另一个人吗?
只是补充上面的评论,这里是字节码:
In [10]: dis.dis(is_zero_equal_sign)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 20
3 12 LOAD_CONST 2 ('zero')
15 PRINT_ITEM
16 PRINT_NEWLINE
17 JUMP_FORWARD 0 (to 20)
>> 20 LOAD_CONST 0 (None)
23 RETURN_VALUE
In [11]: dis.dis(is_zero_no_equal_sign)
2 0 LOAD_FAST 0 (x)
3 POP_JUMP_IF_TRUE 14
3 6 LOAD_CONST 1 ('zero')
9 PRINT_ITEM
10 PRINT_NEWLINE
11 JUMP_FORWARD 0 (to 14)
>> 14 LOAD_CONST 0 (None)
17 RETURN_VALUE
查看字节码似乎在性能方面的差异基本上是微不足道的。当使用等号时,CPython 仍然需要加载 0 作为常量,比较过程略有不同。如果你只是想要步骤少的那个,你可以使用没有'=='的那个。
在python之间进行比较的方式是否有区别:
if x == 0.0:
print "x is zero"
和
if not x:
print "x is zero"
这会让一个人更喜欢另一个人吗?
只是补充上面的评论,这里是字节码:
In [10]: dis.dis(is_zero_equal_sign)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 20
3 12 LOAD_CONST 2 ('zero')
15 PRINT_ITEM
16 PRINT_NEWLINE
17 JUMP_FORWARD 0 (to 20)
>> 20 LOAD_CONST 0 (None)
23 RETURN_VALUE
In [11]: dis.dis(is_zero_no_equal_sign)
2 0 LOAD_FAST 0 (x)
3 POP_JUMP_IF_TRUE 14
3 6 LOAD_CONST 1 ('zero')
9 PRINT_ITEM
10 PRINT_NEWLINE
11 JUMP_FORWARD 0 (to 14)
>> 14 LOAD_CONST 0 (None)
17 RETURN_VALUE
查看字节码似乎在性能方面的差异基本上是微不足道的。当使用等号时,CPython 仍然需要加载 0 作为常量,比较过程略有不同。如果你只是想要步骤少的那个,你可以使用没有'=='的那个。