Принятие этого x
целое число, конструкция if x:
функционально то же как if x != 0:
в Python. Руководства по стилю некоторых языков явно запрещают против первого - например, руководство по стилю ActionScript/Flex указывает, что Вы никогда не должны неявно бросать интервал к bool для этого вида вещи.
Python имеет предпочтение? Ссылка на PEP или другой авторитетный источник была бы лучшей.
Конструкция: if x:
обычно используется для проверки булевых значений.
Для int
ов использование явного x != 0
предпочтительнее - в соответствии с явное лучше неявного (PEP 20 - Zen of Python).
Обычно я читаю:
if(x)
как вопрос о существовании.
if( x != 0)
- вопрос о числе.
Здесь нет жесткого и быстрого правила. Вот несколько примеров, где я бы использовал каждую из них:
Предположим, что я взаимодействую с некоторой функцией, которая возвращает -1 при ошибке и 0 при успехе. Такие функции довольно распространены в C, и они часто встречаются в Python при использовании библиотеки, которая обертывает функции C. В этом случае я бы использовал if x:
.
С другой стороны, если я собираюсь делить на x
и хочу убедиться, что x
не 0
, то я буду явным и напишу if x != 0
.
Как примерное правило, если я рассматриваю x
как bool
во всей функции, то я скорее всего буду использовать if x:
- даже если я могу доказать, что x
будет int
. Если в будущем я решу, что хочу передать в функцию bool
(или какой-нибудь другой тип!), мне не придется ее модифицировать.
С другой стороны, если я действительно использую x
как int
, то я, скорее всего, пропишу 0
.
Это зависит от того, чего вы хотите; если x
- целое число, они эквивалентны, но вы должны написать код, который точно соответствует вашему намерению.
if x:
# x is anything that evaluates to a True value
if x != 0:
# x is anything that is not equal to 0
Могу ли я предположить, что количество споров по этому вопросу достаточно, чтобы ответить на него?
Некоторые утверждают, что "если x" должно использоваться только для Z, другие для Y, третьи для X.
Если такое простое утверждение способно вызвать такую суету, для меня очевидно, что утверждение недостаточно ясно. Напишите, что вы имеете в виду.
Если вы хотите проверить, что x равен 0, то напишите "if x == 0". Если вы хотите проверить, существует ли x, напишите "if x is not None".
Тогда не будет ни путаницы, ни споров, ни дебатов.
Если вы хотите протестировать x в логическом контексте:
if x:
Более явно, для x валидность (не соответствует пустым контейнерам) :
if x is not None:
Если вы хотите тестировать строго в целочисленном контексте:
if x != 0:
Последний на самом деле неявно сравнивает типы.
Не будет ли if x is not 0:
предпочтительным методом в Python, по сравнению с if x ! = 0:
?
Да, первый вариант немного длиннее в написании, но у меня сложилось впечатление, что is
и is not
предпочтительнее, чем ==
и !=
. Благодаря этому Python легче читать как естественный язык, чем как язык программирования.