Ich mache das in Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
Was ist die Python 3-Version davon?
Ich habe versucht, online nach Beispielen zu suchen, aber ich habe immer wieder Python 2-Versionen erhalten.
Ich mache das in Python 2:
"(%d goals, $%d)" % (self.goals, self.penalties)
Was ist die Python 3-Version davon?
Ich habe versucht, online nach Beispielen zu suchen, aber ich habe immer wieder Python 2-Versionen erhalten.
Antworten:
Hier sind die Dokumente zur "neuen" Formatsyntax. Ein Beispiel wäre:
"({:d} goals, ${:d})".format(self.goals, self.penalties)
Wenn beide goals
und penalties
Ganzzahlen sind (dh ihr Standardformat ist in Ordnung), kann dies verkürzt werden auf:
"({} goals, ${})".format(self.goals, self.penalties)
Und da die Parameter Felder von sind self
, gibt es auch eine Möglichkeit, dies zweimal mit einem einzelnen Argument zu tun (wie @Burhan Khalid in den Kommentaren feststellte):
"({0.goals} goals, ${0.penalties})".format(self)
Erklären:
{}
bedeutet nur das nächste Positionsargument mit Standardformat;{0}
bedeutet das Argument mit Index 0
im Standardformat;{:d}
ist das nächste Positionsargument mit dezimalem Ganzzahlformat;{0:d}
ist das Argument mit index 0
im dezimalen Ganzzahlformat.Es gibt viele andere Dinge, die Sie tun können, wenn Sie ein Argument auswählen (benannte Argumente anstelle von Positionsargumenten verwenden, auf Felder zugreifen usw.) und viele Formatoptionen (Auffüllen der Zahl, Verwenden von Tausenden Trennzeichen, Anzeigen von Zeichen oder nicht usw.). Einige andere Beispiele:
"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)
"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)
"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'
"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'
"games: {:>3}".format(player1.games) # 'games: 123'
"games: {:>3}".format(player2.games) # 'games: 4'
"games: {:0>3}".format(player2.games) # 'games: 004'
Hinweis: Wie andere bereits betont haben, ersetzt das neue Format das frühere nicht. Beide sind sowohl in Python 3 als auch in den neueren Versionen von Python 2 verfügbar. Einige mögen sagen, dass es eine Frage der Präferenz ist, aber meiner Meinung nach ist die neuere viel ausdrucksstärker als die ältere und sollte beim Schreiben von neuem Code verwendet werden (es sei denn, sie zielt natürlich auf ältere Umgebungen ab).
"({0.goals} goals, ${0.penalties})".format(self)
"conversion rate: {:.2%}".format(self.goals / self.shots)
? Funktioniert gut für mich wie es ist ... (Python 3.4) Beachten Sie, dass es keine enthält f
, ich bitte um Formatierung als Prozentsatz, nicht als Gleitkommazahl.
"{:.2f}%".format(float_num)
funktioniert gut für beide.
$
hat hier keine besondere Bedeutung, weder in der alten noch in der neuen Formatsyntax, sollte also unverändert in der generierten Zeichenfolge vorhanden sein.
Python 3.6 unterstützt jetzt die Shortand-Literal-String-Interpolation mit PEP 498 . Für Ihren Anwendungsfall lautet die neue Syntax einfach:
f"({self.goals} goals, ${self.penalties})"
Dies ähnelt dem vorherigen .format
Standard, lässt jedoch Dinge wie :
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result: 12.35'
Diese Zeile funktioniert wie sie ist in Python 3.
>>> sys.version
'3.2 (r32:88445, Oct 20 2012, 14:09:29) \n[GCC 4.5.2]'
>>> "(%d goals, $%d)" % (self.goals, self.penalties)
'(1 goals, $2)'
Ich mag diesen Ansatz
my_hash = {}
my_hash["goals"] = 3 #to show number
my_hash["penalties"] = "5" #to show string
print("I scored %(goals)d goals and took %(penalties)s penalties" % my_hash)
Beachten Sie das an die Klammern angehängte d und s.
Ausgabe wird sein:
I scored 3 goals and took 5 penalties