Подтвердить что ты не робот

Что более "питоновское" для "не"

Я видел это в обоих направлениях, но какой путь более 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?

4b9b3361

Ответ 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) #!