Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Поясните работу конструкции if m:

#python


>>> m = 'Non'

>>> if m == True:
    print('ok')
else:
    print('error')    
error
>>> 


А вот если сделать вот так!

>>> if m:
     print('ok')
else:
    print('error')    
ok
>>> 


Во второй сессии мы получаем ОК.

Почему так происходит? Я думал выражение if m: - это тоже самое что if m== True,
если думать так, то и ответ должен быть один и тот же.

Исправьте меня!
    


Ответы

Ответ 1



Когда Вы пишете if m == True:, Вы требуете явного совпадения, если же Вы пишете if m:, действуют следующие правила проверки истинности: любое число, не равное 0, или непустой объект - истина; числа, равные 0, пустые объекты и значение None - ложь. Таким образом, m == True ==> 'Non' == True ==> False но поскольку m - непустой объект, то он принимается за True.

Ответ 2



В питоне есть такое понятие как Falsy values, в которые входят False, [], {}, list(), set(), None, 0 - Так вот, при встрече с условным оператом: a = [] if a: ==> False интерпретатор вызывает метод __bool__, если он не реализован, то вызывается метод __len__. получается из за того, что len([]), len({}) равны нулю они и возвращают False. А вообще интуитивно все правильно, то есть пустой массив должен быть False, поэтому думаю, что это фича. кстати любой объект пользовательского класса (созданный программистом например) всегда будет истиной, если не определен метод __bool__, то проверка на истинность объекта вернет сам объект.

Комментариев нет:

Отправить комментарий