Форум сайта python.su
Можете объяснить что делает вот такая конструкция? Как я понял она пробегает по d_s и ищет индекс последнего элемента который удовлетворяет условию d_s.dollars >= price, а функция next должна вернуть следующий после него? Или же эта конструкция ищет первое вхождение элемента удовлетворяющее условию?
index1: Optional[int] = next((i for i, d_s in enumerate(new_asks) if d_s.dollars >= price), None)
Офлайн
Формально ничего она не делает так как приведенный фрагмент синтаксически некорректен. И уж тем более недостаточен для запуска.
Скорее всего первый.
Офлайн
daaarРазложи её просто на несколько конструкций
Можете объяснить что делает вот такая конструкция?
1.
next((i for i, d_s
in enumerate(new_asks)
if d_s.dollars >= price), None)
2.
next((i for i, d_s in enumerate(new_asks) if d_s.dollars >= price), None)
3.
next(x, None)
x = (i for i, d_s in enumerate(new_asks) if d_s.dollars >= price)
>>> help(next)
next(...)
next(iterator[, default])
Return the next item from the iterator. If default is given and the iterator
is exhausted, it is returned instead of raising StopIteration.
>>> help(enumerate)
class enumerate(object)
| enumerate(iterable[, start]) -> iterator for index, value of iterable
|
| Return an enumerate object. iterable must be another object that supports
| iteration. The enumerate object yields pairs containing a count (from
| start, which defaults to zero) and a value yielded by the iterable argument.
| enumerate is useful for obtaining an indexed list:
| (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
daaarЭта конструкция создаёт генератор. Генератор - это такая конструкция, которая для получения следующего элемента производит какие-то вычисления (не хранит все элементы в памяти). Соответственно, функция next() используется для того, чтобы сказать генератору “дай мне следующий свой элемент, если он есть”. При этом когда ты только создал генератор, ни один элемент из него не взят - просто сам генератор построен и ждёт, когда из него будут элементы брать один за другим.
Или же эта конструкция ищет первое вхождение элемента удовлетворяющее условию?
>>> def g(): ... yield 1 ... yield 2 ... yield 3 ... >>> gen = g() # генератор только построился, элементы не взяты никакие >>> >>> next(gen) # первый элемент взяли, второй - наготове 1 >>> next(gen) # второй элемент взяли, третий - наготове 2 >>> next(gen) # третий элемент взяли, генератор пуст 3 >>> >>> next(gen) # четвёртый элемент пытаемся взять, генератор говорит "нету" Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> >>> next(gen, 'nothing') # генератор говорит 'nothing' вместо "нету" 'nothing' >>>
Отредактировано py.user.next (Фев. 17, 2021 08:01:03)
Офлайн