我的同事在这种情况下使用这种方式
if len(A) is not 0:
print('A is not empty')
我更喜欢这个
if A:
print('A is not empty')
什么是正反两方论证?
她的观点是第一种方式更直接地表达了她确切的意图。我的观点是我的方式更加简洁。
同时,第一种方式比我的方式快两倍:
>>> 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
可以测试真实性(空值),比较安全。 - cs95x = 257; x is 257
失败。CPython 只会对小整数进行内部化处理。 - L3viathanTrue
。如果我将语句写在不同的行中,则会失败。 - Matthias