我的同事在条件中使用这种方式
if len(A) is not 0:
print('A is not empty')
我喜欢这个
if A:
print('A is not empty')
什么是prop-cons参数?
她的观点是,第一种方式是更直接的方式来显示她的确切需求。我的观点是我的方法更短。
第一种方法也是我的方法的两倍:
>>> 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
的工作方式感到困惑:-)
答案 0 :(得分:12)
PEP 8样式指南很明确:
对于序列(字符串,列表,元组),请使用以下事实: 序列是错误的。
Yes: if not seq: if seq: No: if len(seq): if not len(seq):
答案 1 :(得分:2)
我认为,如果A = 42,您的同事代码将引发错误
object of type 'int' has no len()
而您的代码将只执行if之后的任何内容。
答案 2 :(得分:1)
您没有比较同一件事。 如果您比较一下:
import timeit
print(timeit.timeit('if len(A) is not 0:\n pass', setup='A=[1,2,3]'))
print(timeit.timeit('if A:\n pass', setup='A=[1,2,3]'))
您将看到您的方法更快。 另外,您的方法是更Python化的方式。
答案 3 :(得分:1)
1。
if len(A) is not 0:
print('A is not empty')
2。
if A:
print('A is not empty')
第一种方法和第二种方法的区别在于,您只能将len(A)用于列表,元组,字典之类的结构,因为它们支持len()函数,但不能将len()函数用于数据或像字符,字符串,整数(数字)。
例如:
len(123),len(abc),len(123abc):将引发错误。
但是, 列表= [1,2,3,4,5]
len(list)不会引发错误
if A:
statement # this is useful while our only concern is that the variable A has some value or not