Оператор in можно использовать с генераторами: x in g
. Python будет итерировать g
, пока x
не найдётся или генератор не исчерпается.
>>> def g():
... print(1)
... yield 1
... print(2)
... yield 2
... print(3)
... yield 3
...
>>> 2 in g()
1
2
True
Однако
range()
делает для вас больше. В нём переопределён магический метод __contains__
, который позволяет оператору in
работать с сложностью O(1):
In [1]: %timeit 10**20 in range(10**30)
375 ns ± 10.7 ns per loop
Учтите, что это не работает для функции
xrange()
в Python 2.👉@BookPython
>>Click here to continue<<