Я заметил, что оба следующих выражения работают, и хотел бы знать, какой из них рекомендуется использовать и почему?
>>> not(True)
False
>>> not True
False
Имея опыт функционального программирования (у меня есть опыт работы с R), я больше склоняюсь к первому способу. Это принято или есть какие-то недостатки?
Оба случая использования not(True) и not True вместо просто False для меня не имеют никакого смысла. Как правило, во многих других случаях вы можете использовать ненужные фигурные скобки, например, чтобы повысить читаемость, не полагаясь на приоритет операторов или обработку слева направо. Почему ты спрашиваешь? Ожидаете ли вы, что разница выйдет за рамки наличия двух запасных фигурных скобок в исходном коде? Почему вы ожидаете такой разницы?
Стоит сказать, что not — это оператор, а не функция. Например, если бы я действительно этого хотел, я мог бы сделать y = print, затем y('hi'), и это сделало бы то же самое, что и print('hi'). Это потому, что print — это функция. Но y = not — это синтаксическая ошибка.
Ради интереса, вы пишете !(TRUE) вместо !TRUE, когда используете R? (Оба синтаксически действительны.)
Если бы вы пришли из eLisp... вы бы, как правило, использовали ненужные фигурные скобки везде, где только возможно :D, например x=(5); y=(7); z=(1*(1*(1*(x+y)))) (весь допустимый синтаксис Python, который вы могли бы использовать, чтобы получить знакомый вид...). Помимо использования ненужных фигурных скобок существует множество других способов запутать код в Python...
Вот еще более «лиспичный» валидный код Python: >>> (exec("x=5")); (exec("y=7")); (1*sum((x,y))) # дает 12 в интерактивном Python...






Более «питоническим» способом будет второй вариант без круглых скобок.
Ваш ответ можно улучшить, добавив дополнительную вспомогательную информацию. Пожалуйста, отредактируйте , добавив дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Согласно [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:.
Да, я понял, что ты имел в виду. Сначала я искал правила о скобках и не нашел подходящих.
Хорошо, тогда зачем вам использовать 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). Поэтому избегайте скобок!
Хотя оба варианта синтаксиса действительны, второе использование встречается чаще. это проще и короче. Однако использование not с логическими литералами не является хорошей практикой. Используйте «Ложь» вместо «Неверно».