ясность и дисциплина
May. 19th, 2022 03:06 pmВот в питоне у нас есть "lazy objects" и мы не можем знать размер генератора. Это же генератор, да? Откуда он знает, сколько там данных?
Но если мы итерируемся по списку, то, может быть, мы знаем?
Нет. Слишком сложно. Давайте так, чтобы итераторы никогда их не знали, даже если знать тривиально.
Это питоновский туман в голове.
А вот как выглядит ясная светлая голова: https://doc.rust-lang.org/stable/std/iter/trait.ExactSizeIterator.html
An iterator that knows its exact length. Реализует всё, что умеет Iterator, но ещё, кроме этого, умеет и ответить на вопрос о своей длине (и числе оставшихся элементов).
Зачем такое нужно? Например, потому что мы можем использовать его всюду, где используются итерируемые объкты IntoIter.
В питоне вы не можете использовать генератор вместо списка. Потому что у него нет len. Даже если вы его только что сконструировали из списочного объекта. В Rust - можно, потому что ExactSizeIterator может отвечать на такие вопросы.
Но если мы итерируемся по списку, то, может быть, мы знаем?
Нет. Слишком сложно. Давайте так, чтобы итераторы никогда их не знали, даже если знать тривиально.
Это питоновский туман в голове.
А вот как выглядит ясная светлая голова: https://doc.rust-lang.org/stable/std/iter/trait.ExactSizeIterator.html
An iterator that knows its exact length. Реализует всё, что умеет Iterator, но ещё, кроме этого, умеет и ответить на вопрос о своей длине (и числе оставшихся элементов).
Зачем такое нужно? Например, потому что мы можем использовать его всюду, где используются итерируемые объкты IntoIter.
В питоне вы не можете использовать генератор вместо списка. Потому что у него нет len. Даже если вы его только что сконструировали из списочного объекта. В Rust - можно, потому что ExactSizeIterator может отвечать на такие вопросы.
no subject
Date: 2022-05-19 12:46 pm (UTC)Я так и не понял, на хрена длина. Проверить непустоту - это понятно, но тут длина не нужна, достаточно почекать hasNext.
no subject
Date: 2022-05-20 04:45 pm (UTC)no subject
Date: 2022-05-21 06:00 pm (UTC)Основной поит - если это ExactSizeIterator, то он не отличим от списка (Vec), который может быть итерируем и имеет длину.
А в питоне list и generator - не одинаковы, хотя могли бы быть (если бы generator умел думать о том, известного он размера или нет).