2016-09-14 5 views
2

ich einige Python-Code geerbt haben, die eine Zeichenfolge aus den String-Argumente in __init__ bestanden Konstrukte:Python Weg Argumentliste Zeichenfolge zu konvertieren

self.full_tag = prefix + number + point + suffix 

Vielleicht bin ich nur über dachte, es aber ist dies die beste Möglichkeit, die Argumente zu verketten? Ich weiß, dass es möglich ist, wie etwas zu tun:

self.full_tag = "".join([prefix, number, point, suffix]) 

Oder nur String-Format-Funktion:

self.full_tag = '{}{}{}{}'.format(prefix, number, point, suffix) 

Was ist der Python Art und Weise, dies zu tun?

+3

Alle diese Möglichkeiten sind in Ordnung. Im Allgemeinen ist '+' wahrscheinlich am wenigsten effizient (obwohl Sie 'tmite' sollten, um sicher zu sein ;-). Wenn es kein Engpass ist, bin ich mir nicht sicher, ob irgendeine der Möglichkeiten wirklich von Bedeutung ist. Sie sind alle ziemlich klar in was Sie versuchen, mit dieser Codezeile zu erreichen ... – mgilson

+0

Gut, ich sehe Empfehlungen für jede Option. Also ich denke, es kommt darauf an. –

Antwort

3

Pythonic Weg ist The Zen of Python zu folgen, die mehrere Dinge über diesen Fall zu sagen hat:

  • Schön ist besser als hässlich.

  • Einfach ist besser als komplex.

  • Lesbarkeit zählt.

dem Hinzufügen das berühmte Zitat von DonaldKnuth:

Wir über kleine Effizienz vergessen sollte, sagen wir etwa 97% der Zeit: vorzeitige Optimierung ist die Wurzel allen Übels ist.

Mit diesem Hintergrund ist die beste Ihre Wahl:

self.full_tag = prefix + number + point + suffix 

Obwohl, wenn die Zahl wirklich eine Nummer und Punkt Punkt ist, ist wirklich ein Punkt, dann ist dies noch deutlicher:

self.full_tag = "%s%d.%s" % (prefix, number, suffix) 
  • Explizit ist besser als implizit.
+2

"[' str.format'] ist der neue Standard in Python 3 und sollte der '%' - Formatierung vorgezogen werden, die in String-Formatierungsoperationen in neuem Code beschrieben wird. " https://docs.python.org/2/library/stdtypes.html # str.format – Alden

+1

@Alden das ist korrekt, 'Format' scheint von den Erstellern von Python unterstützt zu werden, aber ich persönlich bevorzuge immer noch die alte 'printf'-Syntax. Vielleicht bin ich nur altmodisch, aber es sieht einfacher und mehr aus lesbar für mich – zvone

+2

Mit @ Alden im Sinn, dies ist eine sehr nette Antwort, der Vollständigkeit halber ist [hier] (https://www.python.org/dev/peps/pep-0020/) eine vollständige Link zu PEP20 – Ian

Verwandte Themen