Der Wörterbucheintrag wird beim Drucken abgeschnitten

8

Ich habe ein Wörterbuch mit Gleitkommawerten.

Wenn ich das Wörterbuch so drucke, wie es ist, bekomme ich diese Werte mit voller Genauigkeit gedruckt.

Wenn ich jedoch versuche, jeden Wert einzeln zu drucken, werde ich abgeschnitten.

Ein einfaches Codierungsbeispiel zur Veranschaulichung des Problems:

%Vor%

Nun kann ich das natürlich mit format lösen, also im obigen Beispiel:

%Vor%

Allerdings möchte ich diese Art von Lösung vermeiden.

In erster Linie, weil ich nicht die exakte Genauigkeit kenne, die für jeden Eintrag im Wörterbuch benötigt wird. Zweitens, weil ich es vorziehe, die Art der umständlichen Codierung zu vermeiden, die das Druckformat jedes Feldes von vornherein erfordert.

Mit anderen Worten, ich möchte etwas tun wie:

%Vor%

Oder:

%Vor%

Und der Wert von d['x'] wird in voller Genauigkeit ausgedruckt.

Warum wählt der Python-Interpreter verschiedene Druckformate für d und für d['x'] , und welchen Ansatz kann ich hier nehmen, um meinen Zweck zu erreichen?

Vielen Dank für Ihre Hilfe.

    
goodvibration 21.08.2017, 12:39
quelle

2 Antworten

3

Was Sie sehen, ist ein Unterschied zwischen dem, was gedruckt wird, wenn die Methode __str__ aufgerufen wird, und der __repr__ , die aufgerufen wird.

Ein Beispiel:

%Vor%

Der Grund für diesen Unterschied liegt darin, dass str versucht, die Anzahl in python2 zu kürzen.

Dies wird in python3 geändert, und die str und repr verhalten sich konsistent.

    
cᴏʟᴅsᴘᴇᴇᴅ 21.08.2017, 12:48
quelle
1
  

Wenn ich das Wörterbuch so drucke, wie es ist, bekomme ich diese Werte mit voller Genauigkeit gedruckt.

Nein, nicht wirklich. Beispiel (beachten Sie die unterschiedliche letzte Ziffer):

%Vor%

Und die tatsächliche Genauigkeit von d['x'] ist nicht genau:

%Vor%

Beim Drucken des Wörterbuchs erhalten Sie die Zeichenfolge repr . Was Sie erhalten, wenn Sie nur den Fließkommawert drucken, ist die Zeichenfolge str :

%Vor%

Verwenden Sie also repr , wenn Sie die gleiche Ausgabe wie beim Drucken des Wörterbuchs wünschen.

Ich denke, der Grund dafür ist, dass beim Drucken einer Nummer ein Endbenutzer wahrscheinlich angezeigt wird. Und ein Wert wie 0.010000000000000231 in der Realität (d. H. Nicht künstlich eingegeben wie Sie) ist eher das Ergebnis der Ungenauigkeit der Berechnung eines Computers und der tatsächliche Wert ist wirklich 0,01 statt. Wie bei Berechnungen mit Preisen in Dollar bedeutet 0,01 1 Cent. Es ist also sinnvoller, dies dem Endbenutzer anstelle von 0.010000000000000231 zu zeigen.

Wenn Sie jedoch ein Wörterbuch oder eine andere größere Struktur drucken, wird dies wahrscheinlich nicht einem Endbenutzer angezeigt, sondern eher von einem Entwickler als Debug-Ausgabe. Und für den Entwickler ist es wichtig, einen Wert zu erhalten, der "genau" den gespeicherten Wert repräsentiert, keine verschönerte Version.

    
Stefan Pochmann 21.08.2017 13:04
quelle