>>> or else
Часто, когда полученное значение пусто, нужно использовать значение по умолчанию, чтобы программа продолжила работу. В этой ситуации можно использовать тернарный оператор:
name = user_name()
name = name if name else 'User'
Но можно написать более компактный код, используя оператор or
:
name = user_name() or 'User'
Оператор or
работает по короткой схеме (short-sircuit) и возвращает первое же значение, которое оценивается как True
. Хотя выражение выглядит как логическое, его результатом является не булево значение!
>>> and also
Оператор and
, как и оператор or
, работает по короткой схеме (short-sircuit) и позволяет организовать условное присваивание первого из операндов, который будет оценен как False
:
>>> x = 1 and 'Привет' and 0
>>> x
0
Также можно организовать условный вызов функции после оператора and
. Вызов будет сделан только в том случае, когда значение перед операторорм and
будет оценено как True
:
>>> input('имя? ') and input('рост? ')
имя?
''
>>> input('имя? ') and input('рост? ')
имя? Андрей
рост? 185
'185'
>>> insinstance
Принадлежность объекта к некоторому классу или одному из нескольких классов в Python проверяется с помощью функции isinstance()
. Например,
>>> isinstance(1, int)
True
>>> isinstance(1.0, int)
False
>>> isinstance(1.0, (int, float))
True
>>> isinstance([], (tuple, dict, list))
True
В соответствии с картиной мира ООП объект является одновременно экземпляром своего класса и каждого из классов-предков:
>>> class A(list):
... pass
...
>>> class B(A):
... pass
...
>>> b = B()
>>> isinstance(b, B)
True
>>> isinstance(b, A)
True
>>> isinstance(b, list)
True
Чтобы воспользоваться методами, полученными объектом от некоторого класса, достаточно установить принадлежность объекта к этому классу. И не имеет практического значения, "свой" ли это класс объекта или один из классов-предков.
>>> issubclass
Функция issubclass()
проверяет, является ли класс подклассом другого класса:
>>> issubclass(int, object)
True
>>> issubclass(frozenset, set)
False
>>> issubclass(frozenset, object)
True
Класс object
является общим предком всех классов в Python, поэтому все объекты – экземпляры класса object
, а все классы – его подклассы:
>>> isinstance(1.0, object)
True
>>> isinstance('Hello', object)
True
>>> issubclass(bool, object)
True
>>> issubclass(list, object)
True
>>> bool
это int
Булевы значения в Python представляются экземплярами класса bool
, который является подклассом int
:
>>> issubclass(bool, int)
True
>>> isinstance(False, int)
True
>>> isinstance(1 != 1, int)
True
Поэтому булевы значения True
и False
в числовых контекстах ведут себя как числа 1 и 0, соответственно:
>>> True + True
2
>>> (True + True)**(2*True)
4
>>> 'True is %d' % True
'True is 1'
>>> 'False is %d' % False
'False is 0'
>>>
В строковом контексте они превращаются в строки 'True' и 'False':
>>> 'True is %s' % True
'True is True'
>>> 'False is %s' % False
'False is False'
Комментариев нет:
Отправить комментарий