Как рекомендуется использовать «не» в Python?

Я заметил, что оба следующих выражения работают, и хотел бы знать, какой из них рекомендуется использовать и почему?

>>> not(True)
False
>>> not True
False

Имея опыт функционального программирования (у меня есть опыт работы с R), я больше склоняюсь к первому способу. Это принято или есть какие-то недостатки?

Хотя оба варианта синтаксиса действительны, второе использование встречается чаще. это проще и короче. Однако использование not с логическими литералами не является хорошей практикой. Используйте «Ложь» вместо «Неверно».

Cem Polat 08.10.2023 10:53

Оба случая использования not(True) и not True вместо просто False для меня не имеют никакого смысла. Как правило, во многих других случаях вы можете использовать ненужные фигурные скобки, например, чтобы повысить читаемость, не полагаясь на приоритет операторов или обработку слева направо. Почему ты спрашиваешь? Ожидаете ли вы, что разница выйдет за рамки наличия двух запасных фигурных скобок в исходном коде? Почему вы ожидаете такой разницы?

Claudio 08.10.2023 10:59

Стоит сказать, что not — это оператор, а не функция. Например, если бы я действительно этого хотел, я мог бы сделать y = print, затем y('hi'), и это сделало бы то же самое, что и print('hi'). Это потому, что print — это функция. Но y = not — это синтаксическая ошибка.

slothrop 08.10.2023 11:10

Ради интереса, вы пишете !(TRUE) вместо !TRUE, когда используете R? (Оба синтаксически действительны.)

slothrop 08.10.2023 11:13

Если бы вы пришли из eLisp... вы бы, как правило, использовали ненужные фигурные скобки везде, где только возможно :D, например x=(5); y=(7); z=(1*(1*(1*(x+y)))) (весь допустимый синтаксис Python, который вы могли бы использовать, чтобы получить знакомый вид...). Помимо использования ненужных фигурных скобок существует множество других способов запутать код в Python...

Claudio 08.10.2023 12:17

Вот еще более «лиспичный» валидный код Python: >>> (exec("x=5")); (exec("y=7")); (1*sum((x,y))) # дает 12 в интерактивном Python...

Claudio 08.10.2023 12:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
97
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Более «питоническим» способом будет второй вариант без круглых скобок.

Согласно [Python.Docs]: Встроенные типы — Булевы операции — и, или не (выделено мной):

not x - если x ложь, то True, иначе False

Итак, предпочтительная форма — без круглых скобок.
Причинами могут быть:

  • Круглые скобки обозначают вызов функции

  • Читабельность/простота (личное предположение)

[Python.PEPs]: PEP 8 — Руководство по стилю для кода Python также содержит несколько примеров.

P.S.: Похоже на [ReadTheDocs.Black]: стиль кода Black устраивает обе формы:

(py_pc064_03.08_test0_lancer) [cfati@cfati-5510-0:/mnt/e/Work/Dev/StackExchange/StackOverflow/q077252899]> . ~/sopr.sh 
### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###

[064bit prompt]> python -m black -c "not True"
not True
[064bit prompt]> python -m black -c "not (True)"
not (True)
[064bit prompt]> python -m black -c "~ 1"
~1

@KellyBundy: Есть несколько примеров (чтобы доказать другие вещи, но все же): if not seq:.

CristiFati 08.10.2023 14:06

Да, я понял, что ты имел в виду. Сначала я искал правила о скобках и не нашел подходящих.

Kelly Bundy 08.10.2023 14:26
Ответ принят как подходящий

Хорошо, тогда зачем вам использовать not(True) или, в более общем смысле, not(x)?

Синтаксис a(b) обычно читается как вызов функции a с параметром b.

Но not не является функцией и not(x) не является вызовом функции. В Python not — это встроенный оператор, и его нельзя перегрузить. Кронштейны излишни.

Таким образом, независимо от того, каковы ваши намерения использовать этот синтаксис, not(x) будет лишь сбивать с толку кого-то с нормальным пониманием Python. Это не питонический.

Примечание: иногда мы используем ненужные круглые скобки, но как not (expr) (обратите внимание на пробел), когда есть выражение, чтобы прояснить намерение. Но с not вы можете все запутать not(0) + 1, на самом деле not((0) + 1). Таким образом, круглые скобки могут еще больше запутать (используйте (not 0) + 1). Поэтому избегайте скобок!

Giacomo Catenazzi 09.10.2023 09:29

Другие вопросы по теме