>>> x = 'foo'
>>> x
'foo'
Der Name x
wird also an die 'foo'
Zeichenfolge angehängt . Wenn Sie zum Beispiel anrufen, repr(x)
setzt der Interpreter 'foo'
statt x
und ruft dann auf repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
ruft tatsächlich eine magische Methode __repr__
von auf x
, die die Zeichenfolge angibt, die die Darstellung des 'foo'
zugewiesenen Werts enthält x
. Es kehrt also 'foo'
innerhalb der Zeichenfolge zurück, ""
was zu führt "'foo'"
. Die Idee von repr
ist, eine Zeichenfolge anzugeben, die eine Reihe von Symbolen enthält, die wir in den Interpreter eingeben können, und denselben Wert zu erhalten, an den als Argument gesendet wurde repr
.
>>> eval("'foo'")
'foo'
Wenn wir anrufen eval("'foo'")
, ist es dasselbe, wie wir 'foo'
den Interpreter eingeben. Es ist so, als würden wir den Inhalt der äußeren Zeichenfolge direkt ""
in den Interpreter eingeben.
>>> eval('foo')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval('foo')
File "<string>", line 1, in <module>
NameError: name 'foo' is not defined
Wenn wir anrufen eval('foo')
, ist es dasselbe, wie wir foo
den Interpreter eingeben. Es ist jedoch keine foo
Variable verfügbar und eine Ausnahme wird ausgelöst.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
ist nur die Zeichenfolgendarstellung des Objekts (denken Sie daran, x
Variable bezieht sich auf 'foo'
), daher gibt diese Funktion eine Zeichenfolge zurück.
>>> str(5)
'5'
Zeichenfolgendarstellung der Ganzzahl 5
ist '5'
.
>>> str('foo')
'foo'
Die Zeichenfolgendarstellung der Zeichenfolge 'foo'
ist dieselbe Zeichenfolge 'foo'
.
Das Feedback, das Sie zum interaktiven Interpreter erhalten, wird ebenfalls verwendet
repr
. Wenn Sie einen Ausdruck eingeben (lassen Sie es seinexpr
), tut dies der Interpreter im Grunderesult = expr; if result is not None: print repr(result)
. So ist die zweite Zeile in Ihrem Beispiel wird die Zeichenfolge Formatierungfoo
in die Darstellung wollen Sie ('foo'
). Und dann erstellt der Dolmetscher dierepr
Darstellung davon und hinterlässt doppelte Anführungszeichen.Ich bin mir nicht sicher, was Sie hier fragen. Der Text enthält
single ' and double " quotes
beim Durchlaufenrepr
Escapezeichen für eine Art von Zitat. Natürlich, sonst wäre es nach Python-Regeln kein gültiges String-Literal. Genau darum haben Sie gebetenrepr
.Beachten Sie auch, dass die
eval(repr(x)) == x
Analogie nicht wörtlich gemeint ist. Dies ist eine Annäherung und gilt für die meisten (alle?) Integrierten Typen. Hauptsache, Sie erhalten eine ziemlich gute Vorstellung von Typ und logischem "Wert", wenn Sie dierepr
Ausgabe betrachten.quelle
repr
entweder etwas sein soll, die übergeben werden kanneval
(oder kopiert und eingefügt in die Quelltext) einen gleichen Wert zu erzeugen, oder etwas , das eine Syntax erhöhen wird , wenn Sie versuchen , dass ( in der Regel der<…>
Stil vonobject.__repr__
). Das wurde im Laufe der Jahre schrittweise abgeschwächt, und um 2.7 und 3.x ist es nur "für viele Typen" wahr, und es gibt sogar Ausnahmen in der stdlib (z. B. einnamedtuple
als lokal erstellter Typ gibt Ihnen eine Möglichkeit, dierepr
Sie können). teval
), aber es war die ursprüngliche Idee.str () wird zum Erstellen der Ausgabe für den Endbenutzer verwendet, während repr () für die Debuggin-Entwicklung verwendet wird. Und es repräsentiert den Beamten des Objekts.
Beispiel:
Aus der Ausgabe geht hervor, dass repr () die offizielle Darstellung des Datumsobjekts zeigt.
quelle
1) Das Ergebnis von
repr('foo')
ist die Zeichenfolge'foo'
. In Ihrer Python-Shell wird das Ergebnis des Ausdrucks auch als Darstellung ausgedrückt, sodass Sie im Wesentlichen sehenrepr(repr('foo'))
.2)
eval
berechnet das Ergebnis eines Ausdrucks. Das Ergebnis ist immer ein Wert (z. B. eine Zahl, eine Zeichenfolge oder ein Objekt). Mehrere Variablen können sich auf denselben Wert beziehen, wie in:x und y beziehen sich jetzt auf denselben Wert.
3) Ich habe keine Ahnung, was Sie hier gemeint haben. Können Sie ein Beispiel posten und was Sie sehen möchten?
quelle
Wenn du sagst
Sie gehen nicht
foo
zurbaz
Funktion über.foo
ist in diesem Fall nur ein Name, der zur Darstellung eines Werts verwendet wird'bar'
, und dieser Wert wird an diebaz
Funktion übergeben.quelle