Который из, 'если x': или, 'если x! = 0': предпочтен в Python?

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

Python имеет предпочтение? Ссылка на PEP или другой авторитетный источник была бы лучшей.

5
задан Cory Petosky 9 July 2010 в 21:28
поделиться

7 ответов

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

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

8
ответ дан 18 December 2019 в 16:35
поделиться

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

if(x) как вопрос о существовании.

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

1
ответ дан 18 December 2019 в 16:35
поделиться

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

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

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

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

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

3
ответ дан 18 December 2019 в 16:35
поделиться

Это зависит от того, чего вы хотите; если 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
ответ дан 18 December 2019 в 16:35
поделиться

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

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

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

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

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

0
ответ дан 18 December 2019 в 16:35
поделиться

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

if x:

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

if x is not None:

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

if x != 0:

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

0
ответ дан 18 December 2019 в 16:35
поделиться

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

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

-1
ответ дан 18 December 2019 в 16:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: