Ответ 1
Я бы сказал, что вам легче читать, в зависимости от того, что такое a и b.
Какое из следующих утверждений if более Pythonic?
if not a and not b:
do_something
ИЛИ
if not ( a or b ):
do something
Его не предикатная логика, поэтому я должен использовать ключевые слова Python, потому что она более читабельна правильно?
В более позднем решении, более оптимальном, чем другое? (Я так не верю.)
Есть ли в этом руководстве PEP-8?
Байт-код двух подходов (если это имеет значение):
In [43]: def func1():
if not a and not b:
return
....:
....:
In [46]: def func2():
if not(a or b):
return
....:
....:
In [49]: dis.dis(func1)
2 0 LOAD_GLOBAL 0 (a)
3 UNARY_NOT
4 JUMP_IF_FALSE 13 (to 20)
7 POP_TOP
8 LOAD_GLOBAL 1 (b)
11 UNARY_NOT
12 JUMP_IF_FALSE 5 (to 20)
15 POP_TOP
3 16 LOAD_CONST 0 (None)
19 RETURN_VALUE
>> 20 POP_TOP
21 LOAD_CONST 0 (None)
24 RETURN_VALUE
In [50]: dis.dis(func2)
2 0 LOAD_GLOBAL 0 (a)
3 JUMP_IF_TRUE 4 (to 10)
6 POP_TOP
7 LOAD_GLOBAL 1 (b)
>> 10 JUMP_IF_TRUE 5 (to 18)
13 POP_TOP
3 14 LOAD_CONST 0 (None)
17 RETURN_VALUE
>> 18 POP_TOP
19 LOAD_CONST 0 (None)
22 RETURN_VALUE
Я бы сказал, что вам легче читать, в зависимости от того, что такое a и b.
Я думаю, что оба примера одинаково читабельны, однако, если бы я хотел "вытащить лодку" по удобочитаемости, я бы пошел с:
not any((a, b))
Так как для меня это читается гораздо больше, как английский, и, следовательно, является самым питоническим.
Что использовать? В зависимости от того, что вы хотите сделать, читайте
Что более эффективно, первый делает дополнительный not
, поэтому он технически менее эффективен, но не настолько, чтобы вы могли заметить в нормальной ситуации.
Они эквивалентны и зависят друг от друга от обстоятельств (значения a и b).
Так что просто выберите версию, которую вы найдете наиболее читаемой и/или понятной.
Мне лично нравится подход Эйфеля, помещенный в питоническую форму
если a, а затем b: DoSomething
если a и b: DoSomething
Первый подход отличается от второго, если a является ложным. Он не оценивает b в первом случае, во втором - в этом случае.
Это или эквивалент "или иначе"
http://en.wikipedia.org/wiki/Short-circuit_evaluation
и/или нетерпеливы.
а затем/или короткое замыкание оценки
Самое приятное в синтаксисе заключается в том, что он хорошо читается, и он не вводит новые ключевые слова.
Для фрагмента кода, который должен быть Pythonic, он должен быть как приятным для читателя сам по себе (читаемым), так и в контексте его окружения (согласованным). Без контекста этой части кода хорошее мнение трудно дать.
Но, с другой стороны... Если бы я был Pythonic, по моему мнению, мне нужно было бы действовать последовательно с моим окружением, которое, как представляется, не учитывает контекст (например, OP).
Верхняя часть.