2012-07-19 7 views
84

In Python sagen Sieverketten String und Integer in Python

haben
s = "string" 
i = 0 
print s+i 

werden Sie geben Fehler, so dass Sie

print s+str(i) 

schreiben nicht Fehler zu erhalten.

Ich denke, das ist eine ziemlich ungeschickte Art, Int und String-Verkettung zu behandeln. Sogar Java benötigt kein explizites Casting zu String, um diese Art von der Verkettung zu tun. Gibt es eine bessere Möglichkeit, diese Art von Verkettung zu machen, d. H. Ohne explizites Umwandeln in Python?

+7

Es ist, weil Python Strong getippt (https://en.wikipedia.org/wiki/Strong_typing) Sprache (etwas Google auf zu verstehen, mehr :)) ist. – mouad

+3

Es würde zu Zweideutigkeiten führen. Was wäre das Ergebnis von "1" + 1 "," 2 "oder" 11 "und warum? – Buddy

+1

Buddy Ich bin mir nicht sicher, was Sie denken, aber bitte nehmen Sie nicht einfach an. Mein Problem war, 2 verschiedene Objekttypen zu verketten und ich fand die Lösung. Ich weiß nicht, wie viel Sie in Python programmiert haben, aber haben Sie jemals versucht, zwei Strings nur zu verketten, um Fehler zu erhalten, wenn einer von ihnen kein Typ ist? Sie können explizite Prüfungen durchführen, aber das ist nur ein bisschen Code. Dies ist erforderlich, wenn Sie Fehler protokollieren müssen. – specialscope

Antwort

104

Modern String-Formatierung:

"{} and {}".format("string", 1) 
+2

Vielen Dank für diese nette Art, es zu tun. – specialscope

+0

Nur für die Nachwelt, da sich die Dinge in der Vergangenheit geändert haben und sich in der Zukunft ändern werden: Ab welcher Version ist es "modern"? – jvriesem

23

String-Formatierung, mit dem neuen Stil .format() Methode (mit den Standardeinstellungen bietet .format()):

'{}{}'.format(s, i) 

Oder die ältere, aber "noch kleben herum", % -Formatieren:

'%s%d' %(s, i) 

In beiden obigen Beispielen ist kein Abstand zwischen den beiden verketteten Elementen. Wenn Platz benötigt wird, kann er einfach in Formatzeichenfolgen hinzugefügt werden.

Diese bieten eine Los der Kontrolle und Flexibilität über die Verkettung von Elementen, den Raum zwischen ihnen usw. Für Details über format specifications see this.

69

Keine String-Formatierung:

>> print 'Foo',0 
Foo 0 
+2

Dies funktioniert gut mit Drucken, kann aber keiner Variablen als String zugewiesen werden. Es gibt Set-Objekt. – specialscope

+1

Es bleibt auch ein zusätzliches Leerzeichen zwischen den beiden Elementen, es sei denn, Sie verwenden die v3 'print()' * -Funktion * und stellen einige ihrer Parameter ein. – Levon

10

Python ist eine interessante Sprache, dass es zwar in der Regel ist eine (oder zwei) "offensichtlich" Wege beliebige zu erreichen Aufgabe, Flexibilität besteht noch.

s = "string" 
i = 0 

print (s + repr(i)) 

Der obige Code-Schnipsel in Python3 Syntax geschrieben, aber die Klammern nach dem Druck wurden immer erlaubt (optional) bis Version 3 sie zur Pflicht gemacht.

Hoffe, das hilft.

Caitlin