Python, faule Liste

8

Ist es möglich, eine Liste in Python träge zu bewerten?

Zum Beispiel

%Vor%

Wenn die Liste so eingestellt wurde, dass sie langsam bewertet wird, wäre die letzte Zeile [2]

    
Mike 08.03.2010, 03:52
quelle

3 Antworten

10

Das Konzept der "faulen" Bewertung kommt normalerweise mit funktionalen Sprachen - aber in denen konnten Sie zwei verschiedene Werte nicht demselben Bezeichner zuordnen, also könnte nicht einmal Ihr Beispiel reproduziert werden.

Es geht nicht um Faulheit - es ist garantiert, dass die Verwendung eines Bezeichners identisch ist mit dem Bezug auf den gleichen Wert, auf den der Bezeichner verweist, und die Neuzuweisung eines Bezeichners , ein nagelnannter Name , auf einen anderen Wert, garantiert, dass der Bezeichner auf einen anderen Wert verweist als auf sie. Der Verweis auf den ersten Wert (Objekt) ist nicht verloren.

Betrachten Sie ein ähnliches Beispiel, bei dem keine Neuzuweisung zu einem nackten Namen stattfindet, sondern jede andere Art von Mutation (für ein veränderliches Objekt sind Zahlen und Strings natürlich unveränderlich), einschließlich einer Zuweisung zu etwas < stark> sonst als ein bloßer Name:

%Vor%

Da es keinen a - ... gibt, der den nackten Namen a neu zuweist, sondern einen a[:] = ... , der a 's Inhalt neu zuweist, ist es einfach, Python als "faul" zu definieren "Wie du es wünschst (und tatsächlich würde es einige Anstrengungen erfordern, es" eifrig "zu machen! -) ... wenn Faulheit und Eifer etwas mit einem dieser Fälle zu tun haben (was es nicht tut; -).

>

Sei dir nur der vollkommen einfachen Semantik von "Zuweisung zu einem nackten Namen" bewusst (vs Zuweisung zu allem anderen, was durch die Verwendung deiner eigenen Typen unterschiedlich optimiert und kontrolliert werden kann) und die optische Illusion von "faul gegen eifrig "Vielleicht hoffentlich verschwinden; -)

    
Alex Martelli 08.03.2010, 04:06
quelle
6

Python ist nicht wirklich sehr faul im Allgemeinen .

>

Sie können Generatoren verwenden, um faule Datenstrukturen (wie unendliche Listen usw.) zu emulieren, aber was Dinge wie die Verwendung der normalen Listensyntax angeht, und so weiter, werden Sie keine Faulheit haben.

    
Amber 08.03.2010 03:55
quelle
1

Ich bin über diesen Beitrag gestolpert, als ich nach einer echten faulen Listen-Implementierung gesucht habe, aber es hörte sich nach Spaß an, um es auszuprobieren.

Die folgende Implementierung tut im Grunde das, wonach ursprünglich gefragt wurde:

%Vor%

Du benutzt es so:

%Vor%

Das ist offensichtlich schrecklich.

    
Jamie Cockburn 07.12.2016 11:00
quelle

Tags und Links