Gibt es einen anderen Vorteil, einen anderen faulen Tokenizer als Raum- und Zeiteffizienz zu nutzen?Python

Python-Programme
Anonymous
 Gibt es einen anderen Vorteil, einen anderen faulen Tokenizer als Raum- und Zeiteffizienz zu nutzen?

Post by Anonymous »

Kürzlich habe ich versucht, einen Tokenizer zu implementieren, der diesem Python -DOC -Beispiel für Software Design for Flexibility (SDF) Übung 5.7 implementiert ist (Beachten Sie, dass dies nicht ein Buch -Lehre -Compiler speziell ist, obwohl es SICP sehr ähnlich ist. Es lehrt ein wenig darüber). In diesem Beispiel wird Iterator mit Lazy bewertet. SICP sagt, dass Lazy nützlich ist, um einen Fehler zu vermeiden, wie (definieren (probieren Sie a b) (if (= a 0) 1 b)) (probieren Sie 0 (/1 0)) , was nicht mit hier imho. "Lazy" -Kontext, es gibt keine verwandten Kontexte in früheren Abschnitten über das Parsen. Es handelt sich um einige über faule Codebewegungen, die von Iterator Imho nicht mit der faulen Bewertung zu tun haben. Diese Effizienz ist für große Dateien von Bedeutung, aber nicht für kleine Ausdrucksstritten in der Buchübung, mit der ich gerade arbeite. Sowohl die Weltraumeffizienz als auch die zeitliche Effizienz von Raumrückverbrauch. Siehe die Mailingliste in QA1. Der Teil, der nicht offensichtlich ist, ist, dass das Schleifen über den Iterator wieder den gleichen Speicherort wiederverwendet. />
Gibt es einen Vorteil, dass der faule Tokenizer (d. H. Iterator mit implizite Ertrag in Python) anstelle von nicht-löschem (d. H. Verwenden von List implizit ausgewählt wird. />p.s. (Unabhängig von der obigen Frage) stellte ich ursprünglich diese Frage, wie die Iterator im Schema implementiert werden soll. Später stellte ich fest, dass ich schon einmal nach Coroutine gesucht habe und diese Demo -Schema -Implementierung gefunden habe (siehe auch eine von mir veröffentlichte Antwort, die mit dem mit dem veröffentlicht wurde). Die Beziehung zwischen coroutine und Iterator ist in Pep 492 gezeigt (d. H. Ersteres in C2 Wiki bedeutet die alte Coroutine -Definition in Pep 342). Daher habe ich ein Schema Tag, da jemand in Zukunft mit demselben Problem stoßen kann.

Code: Select all

  (coroutine
(lambda (yield)
(regexp-fold
re
(lambda (i m str acc)
(yield m)
'acc-unused
)
'acc-unused
string
(lambda (i m str acc) acc)
)
)
)
Beachten>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post