Что из `if x:` или `if x! = 0:` является предпочтительным в Python? - PullRequest
5 голосов
/ 10 июля 2010

Предполагая, что x является целым числом, конструкция if x: функционально такая же, как if x != 0: в Python.Руководства по стилю некоторых языков явно запрещают первое - например, руководство по стилю ActionScript / Flex гласит, что вам никогда не следует неявно приводить int к bool для такого рода вещей.

Имеет ли Python предпочтение?Лучше всего ссылка на ПКП или другой авторитетный источник.

Ответы [ 7 ]

8 голосов
/ 10 июля 2010

Конструкция: if x: обычно используется для проверки логических значений.

Для int s использование явного x != 0 предпочтительнее - по признакам явное лучше, чем неявное ( PEP 20 - Zen of Python ).

3 голосов
/ 10 июля 2010

Здесь нет жесткого и быстрого правила. Вот несколько примеров, где я бы использовал каждый:

Предположим, что я взаимодействую с некоторой функцией, которая возвращает -1 в случае ошибки и 0 в случае успеха. Такие функции довольно распространены в C, и они часто возникают в Python при использовании библиотеки, которая оборачивает функции C. В этом случае я бы использовал if x:.

С другой стороны, если я собираюсь делить на x и хочу убедиться, что x не 0, тогда я собираюсь быть явным и написать if x != 0.

В качестве грубого эмпирического правила, если я буду трактовать x как bool во всей функции, тогда я, скорее всего, буду использовать if x: - даже если смогу доказать, что x будет int. Если в будущем я решу передать функцию bool (или какой-либо другой тип!) В функцию, мне не нужно ее изменять.

С другой стороны, если я действительно использую x как int, тогда я, скорее всего, произнесу 0.

1 голос
/ 11 июля 2010

Это зависит от того, что вы хотите; если x является целым числом, они эквивалентны, но вы должны написать код, который точно соответствует вашему намерению.

if x:
    # x is anything that evaluates to a True value
if x != 0:
    # x is anything that is not equal to 0
1 голос
/ 10 июля 2010

Обычно я читаю:

if(x), чтобы задать вопрос о существовании.

if( x != 0) на вопрос о числе.

0 голосов
/ 13 июля 2010

Если вы хотите проверить x в логическом контексте:

if x:

Более явно, для x действительности (не соответствует пустым контейнерам):

if x is not None:

Если вы хотите проверить строго в целочисленном контексте:

if x != 0:

Последний действительно неявно сравнивает типы.

0 голосов
/ 13 июля 2010

Могу ли я предположить, что количество споров по этому вопросу достаточно, чтобы ответить на него?

Некоторые утверждают, что это "если x" следует использовать только для Z, другие для Y, другие для X.

Если такое простое утверждение способно вызвать такую ​​суету, мне ясно, что утверждение недостаточно ясно.Напишите, что вы имеете в виду.

Если вы хотите проверить, что х равен 0, напишите «если х == 0».Если вы хотите проверить, существует ли x, напишите «если x не None».

Тогда нет путаницы, споров, споров.

0 голосов
/ 10 июля 2010

Не будет ли if x is not 0: предпочтительным методом в Python по сравнению с if x != 0:?

Да, первое немного длиннее, но у меня сложилось впечатление, что is и is not предпочтительнее, чем == и !=. Это делает Python более удобным для чтения как естественный язык, чем как язык программирования.

...