Что более "питоновское" для "не"
Я видел это в обоих направлениях, но какой путь более Pythonic?
a = [1, 2, 3]
# version 1
if not 4 in a:
print 'is the not more pythonic?'
# version 2
if 4 not in a:
print 'this haz more engrish'
Какой способ будет считаться лучшим Python?
Ответы
Ответ 1
Второй вариант более Pythonic по двум причинам:
-
Это один оператор, переводящий один операнд байткода. Другая строка действительно not (4 in a)
; два оператора.
Как это бывает, Python оптимизирует последний случай и в любом случае переводит not (x in y)
в x not in y
, но это деталь реализации компилятора CPython.
- Это близко к тому, как вы будете использовать ту же логику на английском языке.
Ответ 2
Большинство согласится, что 4 not in a
более Pythonic.
Python был разработан с целью быть понятным и понятным, а 4 not in a
звучит больше похоже на то, как вы скажете это на английском языке - скорее всего, вам не нужно знать Python, чтобы понять, что это значит!
Обратите внимание, что в терминах байт-кода два будут одинаковыми в CPython (хотя not in
является технически единственным оператором, not 4 in a
подвержен оптимизации):
>>> import dis
>>> def test1(a, n):
not n in a
>>> def test2(a, n):
n not in a
>>> dis.dis(test1)
2 0 LOAD_FAST 1 (n)
3 LOAD_FAST 0 (a)
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> dis.dis(test2)
2 0 LOAD_FAST 1 (n)
3 LOAD_FAST 0 (a)
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
Ответ 3
Я считаю, что not in
более широко используется.
В то время как в руководстве по стилю PEP 8 явно не обсуждается тема, он считает not in
своим собственным оператором сравнения.
Не забывайте о Zen of Python. Одним из основных принципов написания Python является то, что "Readability counts", так что пойдите с выбором, который является самым ясным для чтения и понимания в вашем коде.
Ответ 4
Хотя 4 not in a
предпочтительнее, когда выбор сделан изолированно, могут быть случаи, когда предпочтительным является другой выбор not 4 in a
.
Например, если спецификация программного обеспечения написана в соответствии с not 4 in a
, тогда лучше всего оставить его соответствующим спецификации, чтобы помочь при проверке программного обеспечения на соответствие спецификации.
Еще один пример: один способ позволяет это выражение ухудшения здоровья:
( 4 in well,
well,
not well,
not 4 in well) #!