python“如果len(A)不为0” vs“如果A”语句

时间:2019-01-09 10:08:00

标签: python pep8

我的同事在条件中使用这种方式

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的工作方式感到困惑:-)

4 个答案:

答案 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