Python `если х не None` или` если не х None`?

Для Eclipse:

Добавлены две строки в eclipse.ini

Вторая строка представляет местоположение JDK файла javaw.exe.

-vm

C: \ Program Files \ Java \ jdk1.7.0_60 \ bin \ javaw.exe

Примечание: место -vm строк до - vmargs, в противном случае используется местоположение по умолчанию.

Для STS

Измените то же, что указано выше в STS.ini

639
задан orokusaki 15 November 2016 в 16:03
поделиться

6 ответов

Нет никакой разницы в производительности, поскольку они компилируются с одним и тем же байт-кодом:

Python 2.6.2 (r262:71600, Apr 15 2009, 07:20:39)
>>> import dis
>>> def f(x):
...    return x is not None
...
>>> dis.dis(f)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               0 (None)
              6 COMPARE_OP               9 (is not)
              9 RETURN_VALUE
>>> def g(x):
...   return not x is None
...
>>> dis.dis(g)
  2           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               0 (None)
              6 COMPARE_OP               9 (is not)
              9 RETURN_VALUE

Стилистически я стараюсь избегать not x is y . Хотя компилятор всегда будет рассматривать его как не (x is y) , читатель-человек может неправильно понять конструкцию, поскольку (не x) is y . Если я напишу x is not y , то двусмысленности нет.

927
ответ дан 22 November 2019 в 21:40
поделиться

Руководство по стилю Google и Python является лучшим методом:

if x is not None:
    # Do something about x

Использование not x может привести к нежелательным результатам. См. Ниже:

>>> x = 1
>>> not x
False
>>> x = [1]
>>> not x
False
>>> x = 0
>>> not x
True
>>> x = [0]         # You don't want to fall in this one.
>>> not x
False

Возможно, вам будет интересно узнать, какие литералы оцениваются как True или False в Python:

Отредактируйте комментарий ниже:

Я только что провел еще несколько тестов. not x is None сначала не отрицает x , а затем сравнивается с None . Фактически, похоже, что оператор is имеет более высокий приоритет при использовании таким образом:

>>> x
[0]
>>> not x is None
True
>>> not (x is None)
True
>>> (not x) is None
False

Следовательно, not x is None , по моему честному мнению, лучше всего избегать.

Дополнительная правка:

Я только что провел еще тестирование и могу подтвердить, что комментарий Букзора верен. (По крайней мере, я не смог доказать обратное.)

Это означает, что , если x не равно None , имеет точный результат как , если не x is None . Я исправился. Спасибо букзор.

Однако мой ответ все еще остается в силе: Используйте обычное , если x не равно None . :]

179
ответ дан 22 November 2019 в 21:40
поделиться

если не x равно None больше похож на другие языки программирования, но , если x не равен None определенно звучит более ясно (и более грамматически правильно на английском языке) мне.

Тем не менее, мне кажется, что это больше мое предпочтение.

1
ответ дан 22 November 2019 в 21:40
поделиться

Код должен быть написан так, чтобы он был сначала понят программисту, а затем компилятору или интерпретатору. Конструкция «is not» больше напоминает английский, чем «not is».

126
ответ дан 22 November 2019 в 21:40
поделиться

Оператор is not предпочтительнее, чем отрицание результата is по стилистическим причинам. « if x is not None: » читается так же, как английский, но « if not x is None: » требует понимания приоритета оператора и не читается как английский.

Если есть разница в производительности, мои деньги идут на , а не на , но это почти наверняка не причина для решения предпочесть эту технику. Очевидно, это будет зависеть от реализации. Поскольку не может быть переопределен, в любом случае должно быть легко оптимизировать любое различие.

11
ответ дан 22 November 2019 в 21:40
поделиться

Ответ проще, чем его думают люди.

В любом случае нет никакого технического преимущества, и «x is not y» - это то, что все остальные используют , что делает его явным победителем. Неважно, «больше похоже на английский» или нет; все используют его, а это означает, что каждый пользователь Python - даже китайские пользователи, чей язык Python не похож на него - поймет его с первого взгляда, тогда как немного менее распространенный синтаксис потребует несколько дополнительных мозговых циклов для анализа.

Не отличаться только ради отличия, по крайней мере, в этой области.

30
ответ дан 22 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: