Python, ленивый список

Действительно ли возможно иметь список быть оцененным лениво в Python?

Например,

a = 1
list = [a]
print list
#[1]
a = 2
print list
#[1]

Если бы список был установлен оценить лениво тогда заключительную строку, то был бы [2]

9
задан Mike 8 March 2010 в 03:52
поделиться

2 ответа

Концепция "ленивого" вычисления обычно присутствует в функциональных языках, но в них нельзя переназначать два разных значения одному и тому же идентификатору, поэтому нельзя даже там можно было бы воспроизвести ваш пример.

Дело вовсе не в лени - дело в том, что использование идентификатора гарантированно идентично получению ссылки на то же значение, на которое ссылается идентификатор, и повторному присвоению идентификатора, простое имя с другим значением гарантирует, что идентификатор будет ссылаться на другое значение, отличное от них. Ссылка на первое значение (объект) не теряется.

Рассмотрим аналогичный пример, в котором повторное присвоение пустому имени не используется, а скорее используется любой другой вид мутации (для изменяемого объекта, конечно - числа и строки неизменяемы), включая присвоение чему-то else , кроме простого имени:

>>> a = [1]
>>> list = [a]
>>> print list
[[1]]
>>> a[:] = [2]
>>> print list
[[2]]

Поскольку не существует a - ... , которое переназначает простое имя a , а скорее a [ знак равно, который переназначает содержимое , тривиально легко сделать Python настолько «ленивым», насколько вы хотите (и действительно, потребуются некоторые усилия, чтобы сделать его «нетерпеливым»! -) ... если лень против рвения имеет какое-либо отношение к любому из этих случаев (а это не так ;-).

Просто имейте в виду совершенно простую семантику «присвоения простому имени» (в отличие от присвоения чему-либо еще, которое можно по-разному настраивать и контролировать, используя ваши собственные типы соответствующим образом), и оптическую иллюзию «ленивый против нетерпеливого» "может исчезнуть; -)

11
ответ дан 4 December 2019 в 08:33
поделиться

Python в целом не очень ленивый .

Вы можете использовать генераторы для имитации ленивых структур данных (например, бесконечных списков и т. Д.),но что касается таких вещей, как использование обычного синтаксиса списка и т. д., вам не будет лени.

7
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: