【发布时间】:2019-01-09 10:08:00
【问题描述】:
我的同事在条件下使用这种方式
if len(A) is not 0:
print('A is not empty')
我更喜欢这个
if A:
print('A is not empty')
什么是 prop-cons 参数?
她的观点是,第一种方式更直接地展示了她真正想要的东西。我的意思是我的路更短。
第一种方法也比我的快 2 倍:
>>> import timeit
>>> timeit.timeit('len(A) is not 0', setup='A=[1,2,3]')
0.048459101999924314
>>> timeit.timeit('bool(A)', setup='A=[1,2,3]')
0.09833707799998592
但是
>>> import timeit
>>> timeit.timeit('if len(A) is not 0:\n pass', setup='A=[1,2,3]')
0.06600062699999398
>>> timeit.timeit('if A:\n pass', setup='A=[1,2,3]')
0.011816206999810674
第二种方式快 6 倍!我很困惑if 的工作原理:-)
【问题讨论】:
-
if len(A) is not 0:很危险,因为不能保证引用是相同的(is和is not进行引用检查)。if A测试真实性(空性)并且是安全的。 -
在任何情况下都不应该使用
is not 0。应该是!=0。 -
@vladimirfol:这是特定于实现的。你能在python doc中给我看一个声明吗?它在哪里说保证是一样的?
-
@vladimirfol
x = 257; x is 257失败。 CPython 只实习小整数。 -
@L3viathan:在空闲 (3.6.6) 中,这是
True。如果我将语句写在不同的行中,它会失败。