Welche Probleme lösen die neuen Funktionen von Python 3? [geschlossen]

18

Die neuen Funktionen von Python 3 sagen:

Wir reparieren hauptsächlich bekannte Belästigungen und Warzen und entfernen viel alte Kruft

Es wird erwähnt, was anders ist (das Update), aber nicht warum (die Probleme). Ich habe nicht gefunden, was die Probleme waren. Was waren die Probleme, die durch die Korrekturen gelöst wurden?

user712092
quelle
1
Eine Warze, die sie jedoch nicht entfernt haben, ist der Grund, sich einer Klassenmethode zu unterwerfen. Zug ausfallen.
Rig

Antworten:

11

Ich werde nur diejenigen nennen, die mir sofort in den Sinn kommen.

  • Nur-Schlüsselwort-Argumente: Beschrieben in der Begründung des PEP.
  • nonlocal: Ohne dies können Closures geschlossene Variablen nicht überschreiben. Dieser Bedarf entsteht von Zeit zu Zeit bei Dekorateuren und anderen Funktionen höherer Ordnung. Die einzig sinnvolle Umgehung (ohne die externe API zu wechseln), bei der der gewünschte veränderbare Status in einem veränderbaren Objekt gespeichert wird, ist übermäßig hässlich.
  • Wörterbuch- und Mengenverständnisse: Das Erstellen von Wörterbüchern und Mengen in ähnlicher Weise wie Listenverständnisse ist weniger hübsch und etwas langsamer, wenn dies über Generatorverständnisse erfolgt. Es ermöglicht uns, diese Typen ohne zusätzliche Kosten dort einzusetzen, wo sie angemessen sind. Das Gleiche gilt für festgelegte Literale, insbesondere für inTests (ab Python 3.2 werden diese auch vom Gucklochoptimierer optimiert).
  • In Python 2 gab es 0777Oktalliterale , aber die Notation ist eine Falle für diejenigen, die nicht daran gewöhnt sind (in anderen Kontexten ändert das Hinzufügen einer führenden Null weder Wert noch Basis).
  • Binäre Literale sind nützlich, um ein bisschen herumzuspielen, sogar mehr als hexadezimale Literale.
  • Byte-Literale sind ein Symptom für die erzwungene Unterscheidung zwischen Unicode-Zeichenfolgen und Byte-Zeichenfolgen, und String-Literale sind Unicode-Zeichenfolgen. Diese Änderungen zwingen Sie, über den Unterschied zwischen Text und nicht interpretierten Binärdaten und über Codierungen nachzudenken. Dies ist wichtig, da Sie ansonsten umfangreiche Tests durchführen müssen (bei Eingaben, über die wir englischsprachige, Europa / Amerika-orientierte Dummköpfe selten nachdenken), um codierungsbezogene Fehler zu finden.
  • except ex, var-> except ex as varbehebt den allgemeinen Fehler except ValueError, IndexError(sollte beide abfangen, fängt aber nur den ersten ab und überschreibt den Namen IndexErrormit der abgefangenen Ausnahme).
  • Umfang des Listenverständnisses: Vermeiden Sie es, Namespaces zu verschmutzen, und berücksichtigen Sie sie in Generatorausdrücken.
  • Entfernte Syntax und Module: Bringen Sie uns näher zu "Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun." und vermeidet, dass Leute mit schlechten Tutorials an der alten und kaputten Art festhalten, Dinge zu reparieren.

quelle