Size: a a a

Язык программирования Julia / Julia programming language

2021 March 25

DO

Dmitry Osipov in Язык программирования Julia / Julia programming language
Viktor G.
в открытом доступе от автора: https://mykel.kochenderfer.com/textbooks/
Спасибо
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Ого, интересную штуку хотят добавить (это видимо уже в 1.7)

https://github.com/JuliaLang/julia/pull/37648

Можно будет в генераторы по индексам заходить.

Из PR:

julia> g = (string(x) for x in [1 3 5; 2 4 6])
Base.Generator{Matrix{Int64}, typeof(string)}(string, [1 3 5; 2 4 6])

julia> @btime g[end]
 67.197 ns (2 allocations: 96 bytes)
"6"

julia> @btime collect(g)[end]
 286.318 ns (13 allocations: 704 bytes)
"6"
источник

IP

Ian Pilé in Язык программирования Julia / Julia programming language
Ничоси
источник

IP

Ian Pilé in Язык программирования Julia / Julia programming language
Типа как range питонический
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
?
range всегда можно было индексировать вроде бы.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Это про генераторы, немного другое.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Я кстати не уверен, что питоновские генераторы можно индексировать.
Скорее нет, чем да.
источник

MV

Mitya Volodin in Язык программирования Julia / Julia programming language
Андрей Оськин
Я кстати не уверен, что питоновские генераторы можно индексировать.
Скорее нет, чем да.
Нельзя, но можно написать обертку, которая n раз вызовет генератор. Думаю что тут примерно то же самое, тк генератор часто хранит предыдущее состояние
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Насколько я понимаю, основная идея была именно в том, чтобы не вызывать генератор, насколько я понимаю (но PR не читал).
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
То есть состояние итерировать, но вычисления не делать.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
До тех пор, пока не доползёшь до нужного индекса.
источник

IP

Ian Pilé in Язык программирования Julia / Julia programming language
Андрей Оськин
Я кстати не уверен, что питоновские генераторы можно индексировать.
Скорее нет, чем да.
Нельзя
источник

IP

Ian Pilé in Язык программирования Julia / Julia programming language
Mitya Volodin
Нельзя, но можно написать обертку, которая n раз вызовет генератор. Думаю что тут примерно то же самое, тк генератор часто хранит предыдущее состояние
Угу
источник

IP

Ian Pilé in Язык программирования Julia / Julia programming language
Андрей Оськин
?
range всегда можно было индексировать вроде бы.
Да, можно, но вот range как раз «ленивый»
источник

MV

Mitya Volodin in Язык программирования Julia / Julia programming language
Андрей Оськин
То есть состояние итерировать, но вычисления не делать.
Ну как это :) Это тогда не генератор. Смысл использования генератора как раз в том, что ты можешь опираться на предыдущий стэйт.

Если тебе стэйт не нужен - то это обычная функция. А если нужен, то без прохождения промежуточных вычислений не обойтись (хотя условный yield можно просто N раз игнорировать)
источник

MV

Mitya Volodin in Язык программирования Julia / Julia programming language
Ну можно представить классический пример с числами Фиббоначи
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Генератор != итератор.

(f(x) for x in 1:10)

Если нужен 5 элемент, то значения f(1), f(2), f(3), f(4) не нужны.
Поэтому можно докрутить x до 5 и только после этого сделать вызов f(5).
источник

IP

Ian Pilé in Язык программирования Julia / Julia programming language
Андрей Оськин
Генератор != итератор.

(f(x) for x in 1:10)

Если нужен 5 элемент, то значения f(1), f(2), f(3), f(4) не нужны.
Поэтому можно докрутить x до 5 и только после этого сделать вызов f(5).
эммм, любой генератор является итератором же
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
Кстати есть такая обёртка сейчас - - функция nth(..) в Iterators или типа того
источник

ЕП

Евгений Погребняк... in Язык программирования Julia / Julia programming language
Андрей Оськин
Я кстати не уверен, что питоновские генераторы можно индексировать.
Скорее нет, чем да.
Слайс генератора можно делать через itertools, если речь об этом
источник