Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #4621
| From | Stefan Schwarzer <sschwarzer@sschwarzer.net> |
|---|---|
| Newsgroups | de.comp.lang.python |
| Subject | Re: [Python-de] Wie sieht Python fuer mich aus? |
| Date | 2017-01-09 06:23 +0100 |
| Message-ID | <mailman.364.1483939389.2395.python-de@python.org> (permalink) |
| References | <Python-20170108184230@ram.dialup.fu-berlin.de> <0a1a079d-99e2-f353-9334-ad2b20344449@sschwarzer.net> |
Hi Stefan,
On 2017-01-08 18:52, Stefan Ram wrote:
> Ausgeben
>
> »print« rundet Zahlen bei der Ausgabe etwas, während die
> Konsole alle Nachkommastellen anzeigt.
`print` verwendet die Methode `__str__` zur Umwandlung in
einen String, während in der Konsole (Python-Shell)
`__repr__` verwendet wird. Beide Methoden können
unterschiedlich implementiert sein (siehe unten).
> Variablen
>
> Eine Variable wird durch eine Zuweisung definiert. Eine
> Variable hat keinen Typ, sondern Werte haben einen Typ.
Eine wichtige Einsicht!
> Eine Variable wird an eine Liste gebunden, die Liste wird
> also bei einer Zuweisung nicht kopiert. (Kopieren kann mit
> nachgestelltem slice »[:]« erfolgen.)
Das kopiert nur die erste "Ebene" der Liste ("flache Kopie",
"shallow copy"). "Innere" Listen oder Objekte werden dabei
also nicht kopiert, sondern deren Referenzen übernommen.
>>> L = [[1, 2], [3, 4]]
>>> L2 = L[:]
>>> L[0].append(2)
>>> L2
[[1, 2, 2], [3, 4]]
> »range(2,7)« ergibt einen Bereich (einen Iterator) und
> »range(2)« bedeutet »range(0,2)«.
In Python 2 ergibt `range` eine Liste, in Python 3 einen
Iterator.
> Die spezielle Methode »__string__« repräsentiert Objekte
> einer Klasse als Zeichenfolge.
>
> Muster
>
> def __string__(self,...):
> return "string"
Du meintest wahrscheinlich `__str__`. Wie oben gesagt, gibt
es auch noch `__repr__`. Üblicherweise wird `__str__` für
eine "nutzerfreundliche" Darstellung verwendet und
`__repr__` eher für eine "entwicklerfreundliche".
>>> s = "abc "
>>> print(s)
abc
>>> s # Nur hier sieht man das Leerzeichen am Ende
'abc '
>>> import decimal
>>> d = decimal.Decimal("1.23")
>>> print(d)
1.23
>>> d
Decimal('1.23')
Zu deinem Beispiel: "Technisch" kann man `__str__` und
`__repr__` mit weiteren Argumenten außer `self` definieren,
aber es wird praktisch nie gemacht: Beide Methoden werden
üblicherweise in Zusammenhängen verwendet, bei denen keine
Argumente übergeben werden (können).
>>> class A:
... def __str__(self, x="x"):
... return "a" + x
...
>>> a = A()
>>> print(a)
ax
>>> print(a.__str__("y"))
ay
Wie du siehst, ist der explizite Aufruf von `__str__`
relativ "unhandlich". :-)
Viele Grüße
Stefan
Back to de.comp.lang.python | Previous | Next | Find similar
Re: [Python-de] Wie sieht Python fuer mich aus? Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2017-01-09 06:23 +0100
csiph-web