Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Stefan Schwarzer Newsgroups: de.comp.lang.python Subject: Re: [Python-de] Wie sieht Python fuer mich aus? Date: Mon, 9 Jan 2017 06:23:06 +0100 Lines: 87 Message-ID: References: <0a1a079d-99e2-f353-9334-ad2b20344449@sschwarzer.net> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Trace: news.uni-berlin.de O13bo3OB28q9stqFe3WnkQsRhG63GulivoqdBI+lq6kw== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666 In-Reply-To: X-Provags-ID: V03:K0:SSt6J95ejNqxDJRKCJt2yyml+MvKFSmqmvur0Zy4ujb1AdaJQWq csGUtxLqh2eEdCKcK4LAxX1gH1w4ho64VVc1sMgcvEIy8BkEXYQA1byMd91066DacC4Qx9+ o04hIZ7To0AFpq867gzOLgMEz4kbpzfSSQtAOpvRNhLhwIVEjRVUsrthpq3/C3tp/kBKGrm j4Ln1e49DUeqnds1VWv9w== X-UI-Out-Filterresults: notjunk:1;V01:K0:b8EbfVbsDgI=:o0J2yYOAkOW4Mt9R1k26gU YV3aPVrOiTyjm/FfJ0DKU2W55rcMjMxYiiopMP08HWhTViPheGr5SeSlR9SD3VnUW0SLJXjMa h1s22jrYDF+3K2xwBjGDEV+IwtKkYH311OzIhocy6K+kikntvOmX+rdggWqM9GPyIzD4T2xji jkanu8JX90uNPOuUpvcjamP6sJx7TienK0YY1udIgq1UuJcI2cW/yh757PZmXyuFaKp02jnuM ewam820Nx3RJHZ1gWXEz6pAWDunp6eLnTt5eKUaGgUa75w985X5f8vq5xnBjVXyRSFiDEGP9r sCjpzrxcItKq1y8oBU0o4/WMAwFxGvh4fDUcM4cbus08wVYC4L5edwIDEaqU2pGyYXdivkuzG FaS+9u/cklM0TZiRJlkV4iClza/wxq/pqFS6RRs/wP1AQJOF8xfTlBZVnhpcOAf7WqFCXGIWH ukpnLBQT7CXRy12o6cAXTh4TLlMMhWpyBT05NlzzYYRwQiO354CYMz6TMQI2oFS4ieh7ZMBzT Z7ykGk96igfaUnZvWubJ5xqtFpE0zyOdyYXs6wuvWUlhvg+nvbi9wYrRs44VlgeYEyGq+Bl1B nTAmRUR54BovUGQbemjOAPehi8aG0A+qoBF84Eu2pN/0Vmt1uxnp+y8if4RyFf1u2WG4WJgyj eAon8WHTEzg4jXEG7UQetwiA6RsR8aBsJLBhaKBD7J4YZjhIyMACXaefTcCaTvrdtJmEpmhti cEYcJmI6AYG9mEtO X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <0a1a079d-99e2-f353-9334-ad2b20344449@sschwarzer.net> X-Mailman-Original-References: Xref: csiph.com de.comp.lang.python:4621 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