Variablenzuweisung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

Hello again liebe Forumsgemeide :)

Zur Variablenzuweisung in Python habe ich eine Frage. Vorher habe ich mich versucht bei Google schlau zu machen, dort habe ich aber nur eher allgemeine Erklärungen zu den Datentypen erhalten. Sollte mir jemand einen Tipp für einen besseren Suchbegriff geben oder einen Link geben können wäre ich auch schon glücklich.

Nun aber ersteinmal zu meiner Frage:
Normalerweise fügt man Variablen so ein:

Code: Alles auswählen

variable1 = 5
variable2 = 2
variable3 = variable1 + variable2
okay, soweit logisch.

Nun habe ich aber auch schon öfters ein Prozentzeichen zum Einfügen gefunden:
(hier als Beispiel von der Seite http://docs.python.org/library/email-examples.html)

Code: Alles auswählen

msg['Subject'] = 'The contents of %s' % textfile
Warum kann ich die Variable direkt hinter dem String einfügen?
Was habe ich für Vorteile von dem %?
Wie/wann/wo wendet man es an?

Bislang habe ich nur gefolgert, dass das s hinter %s wohl für string stehen muss.

Ich hoffe mir kann jemand helfen.
Danke schonmal im Vorraus für evtl. Hilfen.

Gruß,
Duesselentchen
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Das sind zwei Paar Schuhe: Oben hast du einfache Zuweisungen an Variablen, mit denen du anschließend rechnest (also ihren Inhalt abrufst). Beim unteren Beispiel handelt es sich um das (ggf. modifizierte) Einfügen von Variableninhalten in Strings (in der alten Form). Das dazugehörige Suchwort wäre "String formatting".
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Stichwort zum Suchen lautet "String Formatting". ;)
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

:D Danke für die Antworten - bin direkt mal dem Link gefolgt und habe mich somal über das String formatting schlau gemacht --> echt tolle Sache :)

Nun noch zwei Fragen dazu:
1. @Pekh: was meinst du mit "in der alten Form"?
2. (Die Frage bezieht sich nun nur auf die Strings):
Also kann ich es zur Vereinfachung vom casten nehmen?

Code: Alles auswählen

print "bla blub %s" % (2)
anstatt

Code: Alles auswählen

print "bla blub " + str(2)
oder gibt es da für Strings auch andere Vorteile?

Dankeschön :)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dies ist die neue Form, welche ab Python 3 ausschließlich genutzt wird. Ab Python 2.6. kann man sie parallel zur alten Form nutzen.
BlackJack

@snafu: Mooooment -- der ``%``-Operator funktioniert auch noch unter Python3:

Code: Alles auswählen

Python 3.1.2 (r312:79147, Sep 27 2010, 09:45:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> '%s welt' % 'hallo'
'hallo welt'
@Duesselentchen: Ich würde es nicht "casten" nennen und es ist halt doch ein wenig anders als die Konkatenation von Zeichenketten. Die Platzhalter müssen ja nicht am Anfang oder am Ende der Zeichenkette stehen, sondern können mitten drin stehen. Es wird je nach Platzhalter in `str`, `int`, `float`, oder `repr` umgewandelt und man kann zusätzlich noch zum Beispiel die Breite, Ausrichtung, Füllzeichen, oder Vor- und Nachkommastellen angeben.
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

@BlackJack: Okay, vielen Dank - ich meine es verstanden zu haben.

Diese neue Form ist mir noch nicht so ganz klar - da werde ich mich erst reinfinden müssen. Dennoch vielen Dank für den Hinweis, das es da was neues gibt. Dann werde ich, wenn ich drauf stoßen werde, nicht so überrascht sein ;)

Vielen Dank an alle Helfer!!!
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Das ist eigentlich nicht weiter schwierig :)

Code: Alles auswählen

# nach Position in der Funktion format()
>>> "{0} und {0} macht {1}".format("zwei", "vier")
'zwei und zwei macht vier'
>>>

# oder namensgebunden
>>> "{zwei} und {zwei} macht {vier}".format(vier="vier",zwei="zwei")
'zwei und zwei macht vier'
>>>
Das sind zumindest die Möglichkeiten, die ich immer nutze ...
Frank
Duesselentchen
User
Beiträge: 19
Registriert: Dienstag 15. März 2011, 17:08

:D Hey, cool - Danke!!!!

Diese zwei Möglichkeiten sind echt nicht schwierig, hattest recht! :)

Gruß,
Duesselentchen
Antworten