Для Eclipse:
Добавлены две строки в eclipse.ini
Вторая строка представляет местоположение JDK файла javaw.exe.
-vm
C: \ Program Files \ Java \ jdk1.7.0_60 \ bin \ javaw.exe
blockquote>Примечание: место -vm строк до - vmargs, в противном случае используется местоположение по умолчанию.
Для STS
Измените то же, что указано выше в STS.ini
Нет никакой разницы в производительности, поскольку они компилируются с одним и тем же байт-кодом:
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
, то двусмысленности нет.
Руководство по стилю 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
. :]
если не x равно None
больше похож на другие языки программирования, но , если x не равен None
определенно звучит более ясно (и более грамматически правильно на английском языке) мне.
Тем не менее, мне кажется, что это больше мое предпочтение.
Код должен быть написан так, чтобы он был сначала понят программисту, а затем компилятору или интерпретатору. Конструкция «is not» больше напоминает английский, чем «not is».
Оператор is not
предпочтительнее, чем отрицание результата is
по стилистическим причинам. « if x is not None:
» читается так же, как английский, но « if not x is None:
» требует понимания приоритета оператора и не читается как английский.
Если есть разница в производительности, мои деньги идут на , а не на
, но это почти наверняка не причина для решения предпочесть эту технику. Очевидно, это будет зависеть от реализации. Поскольку
не может быть переопределен, в любом случае должно быть легко оптимизировать любое различие.
Ответ проще, чем его думают люди.
В любом случае нет никакого технического преимущества, и «x is not y» - это то, что все остальные используют , что делает его явным победителем. Неважно, «больше похоже на английский» или нет; все используют его, а это означает, что каждый пользователь Python - даже китайские пользователи, чей язык Python не похож на него - поймет его с первого взгляда, тогда как немного менее распространенный синтаксис потребует несколько дополнительных мозговых циклов для анализа.
Не отличаться только ради отличия, по крайней мере, в этой области.