Забытые возможности Python
У всех на слуху и часто используются такие возможности Python, как генераторы, декораторы, list comprehensions, оператор with… Но есть в Питоне и некоторые возможности, которые достаточно мало кому известны.
Например, то что в list comprehensions можно использовать “вложенные” циклы:
>>> [a + b for a in 'abc' for b in 'de']
['ad', 'ae', 'bd', 'be', 'cd', 'ce']
Или вот другая возможность - сравнения цепочкой Питон трактует в математическом смысле, а не в программистском. То есть, x < y <= z интерпретируется как x < y and y <= z, не учитывая того, что в первом варианте y вычисляется единожды, а во втором - дважды. Примеры использования:
>>> 'a' in 'ab' in 'abc'
True
>>> 5 in [5] in [[5]]
True
>>> 'a' in 'abcd' in ['abcd', 'adf']
True
>>> a = 5
>>> a == 5 != 234
True
Понятное дело, что использовать можно любые комбинации операций, как бы они неприглядно не выглядели:
>>> 5 < 20 in (20,30)
True
>>> 5 > 1 < 5
True
>>> 5 is not None < 20
True
>>> 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8
True
P.S.Есть ещё пару вещей, про них я чуть позже расскажу.