Python. Как работет условие < if name: >
Только учусь и не могу найти информации по тому как работает условие.
Например, есть список каких-либо элементов, в том числе пустые / нулевые. И надо создать список, исключающий эти элементы:
elems = [(), (), ('',), ('a', 'b'), (), ('a', 'b', 'c'), (1,), (), (), ('d',), ('', ''), ()]
non_empty_elems = [el for el in elems if el]
Мне интересно какая химия происходит в части if el.
Я понимаю, что делает эта конструкция и что здесь используется булевое значение.
Это значит что питон проверяет "этот элемент существует"? Т.е. в данном случае 1 - существующий элемент (имеющий значение), а 0 - пустое значение? Или это по-другому работает?
Проще говоря, что происходит внутри языка во время выполнения if el
Ответы (2 шт):
В данном случае у вас список кортежей условие if el стработает если ваш el не равен None. Пустое множество будь то список, словарь, кортеж тоже вернёт None
if el: эквивалентно if bool(el):, а дальше смотрим документацию по стандартным типам данных Python:
Truth Value Testing
Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below.
By default, an object is considered true unless its class defines either a
__bool__()method that returns False or a__len__()method that returns zero, when called with the object.Here are most of the built-in objects considered false:
constants defined to be false:
NoneandFalsezero of any numeric type:
0,0.0,0j,Decimal(0),Fraction(0, 1)empty sequences and collections:
'',(),[],{},set(),range(0)
Ну то есть все объекты по умолчанию рассматриваются как True, за исключением:
NoneиFalse0любого численного типа- пустых последовательностей и коллекций
Пояснение, с помощью каких встроенных методов объектов происходят проверки, позволяющие определить, что объект имеет значение False:
- либо у него есть метод
__bool__(), возвращающийFalse(видимо, это случаиNone,Falseи разных типов числового нуля) - либо у него есть метод
__len__(), возвращающий0(последовательности и коллекции)