Подтвердить что ты не робот

Разница между "if x" и "if x is not None"

Похоже, что "если x" почти похоже на короткую руку для более сильного синтаксиса "if x is not None". Являются ли они функционально идентичными или существуют случаи, когда для заданного значения x эти два будут оцениваться по-разному?

Я бы предположил, что поведение должно также быть идентичным в реализациях Python, но если есть тонкие различия, было бы замечательно знать.

4b9b3361

Ответ 1

В следующих случаях:

test = False 
test = "" 
test = 0
test = 0.0 
test = []
test = () 
test = {} 
test = set()

Тест if будет отличаться:

if test: #False

if test is not None: #True 

Это так, потому что is проверяет идентичность, то есть

test is not None

эквивалентно

id(test) == id(None) #False

поэтому

(test is not None) is (id(test) != id(None)) #True

Ответ 2

Первая тестирует истинность, тогда как последняя проверяет идентичность с None. Множество значений ложно, например False, 0, '' и None, но только None равно None.

Ответ 3

x = 0
if x: ...  # False
if x is not None: ... # True

Ответ 4

все в python имеет значение bool. значения True, False, None

все верно или ложно

0 - False

[],(), {}, '' являются ложными (все пусто)

[False], ('hello'), 'hello' и т.д. True (причина не пустая)

Только None None.

>>> x = None
>>> if not x:print x #because bool(None) is False

None
>>> if x == None:print x

None
>>> x = False
>>> if not x:print x

False
>>> if x == None:print x

>>> 

наконец, обратите внимание, что True и False являются "специальными" версиями 1 и 0... например

>>>True + 1
2
>>>False + 1
1
>>>range(1, 5)[False]
1

Ответ 5

if x:
    # Evaluates for any defined non-False value of x
if not x:
    # Evaluates for any defined False value of x
if x is None:
    # Evaluates for any instances of None

Нет - это собственный тип, который оказывается ложным. "if not x" оценивает, если x = None, только потому, что None is False.

Нет никаких тонких различий, о которых я знаю, но существуют точные методы тестирования для использования для позитивности/негативности в точных ситуациях. Смешение их может работать в некоторых ситуациях, но может привести к проблемам, если они не поняты.

if x is True:
    # Use for checking for literal instances of True
if x is False:
    # Use for checking for literal instances of False
if x is None:
    # Use for checking for literal instances of None
if x:
    # Use for checking for non-negative values
if not x:
    # Use for checking for negative values
    # 0, "", None, False, [], (), {} are negative, all others are True