python "если len (A) не равно 0" против "если A" заявления - PullRequest
0 голосов
/ 09 января 2019

Мой коллега использует этот способ в условиях

if len(A) is not 0:
    print('A is not empty')

Я предпочитаю этот

if A:
    print('A is not empty')

Что такое аргументы "за" и "против"?

Ее точка зрения заключается в том, что первый способ - это более простой способ показать, что именно она хочет. Я хочу сказать, что мой путь короче.

Также первый способ в 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 работает: -)

Ответы [ 4 ]

0 голосов
/ 09 января 2019

1.

if len(A) is not 0:
    print('A is not empty')

2

if A:
    print('A is not empty')

разница между первым и вторым способами заключается в том, что вы можете использовать len (A) только для таких структур, как list, кортежи, словарь, поскольку они поддерживают функцию len (), но вы не можете использовать функцию len () для данных или как символы, строки, целые числа (числа).

например:

len (123), len (abc), len (123abc): вызовет ошибку.

но, список = [1,2,3,4,5]

len (список) не вызовет ошибку

if A:
    statement  # this is useful while our only concern is that the variable A has some value or not 
0 голосов
/ 09 января 2019

PEP 8 Руководство по стилю ясно об этом:

Для последовательностей (строк, списков, кортежей) используйте тот факт, что пустой последовательности являются ложными.

Yes: if not seq:
     if seq:

No:  if len(seq):
     if not len(seq):
0 голосов
/ 09 января 2019

Вы не сравниваете одно и то же. Если сравнить это:

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]'))

Вы увидите, что ваш метод быстрее. Плюс твой метод более питонический.

0 голосов
/ 09 января 2019

Я бы сказал, что если A = 42, код вашего коллеги вызовет ошибку

object of type 'int' has no len()

в то время как ваш код будет просто выполнять то, что следует после if.

...