2012-09-12 9 views
83

W Pythonie nie wydają się być dwa różne sposoby generowania sformatowanego wyjścia:Sposób drukowania w języku Python: z formą "format" lub procent?

user = "Alex" 
number = 38746 
print("%s asked %d questions on stackoverflow.com" % (user, number)) 
print("{0} asked {1} questions on stackoverflow.com".format(user, number)) 

Czy istnieje jeden sposób, aby być bardziej korzystne niż inne? Czy są one równoważne, jaka jest różnica? Jakiej formy należy użyć, zwłaszcza w przypadku Python3?

Odpowiedz

85

Użyj metody format, zwłaszcza jeśli niepokoisz się pythonem 3 i przyszłością. Od the documentation:

Operacje formatowania opisane tutaj [% substytucje] są przestarzałe i mogą zniknąć w przyszłych wersjach Pythona. Użyj nowego formatowania ciągów w nowym kodzie.

+14

Nowa dokumentacja mówi o procentowym operatorze: "Operacje formatowania opisane tutaj wykazują różne dziwactwa, które prowadzą do liczba typowych błędów ... ", ale ** nie ** jest przestarzałe. http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting – guettli

+2

To nie jest oficjalnie przestarzałe, ale zachęcamy do tego, aby go nie używać. – BrenBarn

+1

Powiązane: http://bugs.python.org/issue14123 – guettli

5

The docs powiedzieć, że metoda format jest preferowana dla nowego kodu. Obecnie nie ma jednak planów usunięcia% formatowania.

18

.format został wprowadzony w python2.6

Jeśli potrzebujesz wsteczną kompatybilność z wcześniejszymi Pythonie, należy użyć %

Dla Python3 i nowszych należy użyć .format na pewno

.format jest mocniejszy niż %. Przenoszenie % na .format jest łatwe, ale na odwrót może być nietrywialne.

+0

jak to jest mocniejsze? – yossi

+4

@yossi Oto jeden przykład http://stackoverflow.com/a/3228928/174728. Pozwala również na wyszukiwanie kluczy/indeksu 'import sys ; "{[version]}" .format (vars (sys)) ' –

+2

o: ' import sys; "% (wersja) s"% (vars (sys)) ' – Pax0r

6

Możesz użyć obu. Żadne wypowiedziane wyrażenie formatowania nie jest przestarzałe. Jednak, jak stwierdzono wcześniej, wywołanie metody formatowania jest odrobinę mocniejsze. Należy również zauważyć, że wyrażenia% są bardziej zwięzłe i łatwiejsze do kodowania. Spróbuj je i zobacz, co najbardziej Ci odpowiada

+0

Warto zauważyć, że moduł 'logging' używa składni"% ", więc może być preferowany ze względów spójności. – sshilovsky

Powiązane problemy