2013-02-07 14 views
24

W końcu zmieniłem z % na operatora formatowania ciągów .format() w moim kodzie 2.x, aby ułatwić migrację do 3.x w przyszłości. To było trochę zaskakujące, aby dowiedzieć się, że nie tylko formatowanie w stylu % pozostaje w Py3, ale jest szeroko stosowane w standardowym kodzie biblioteki. Wydaje się to logiczne, ponieważ pisanie '(%s)' % variable jest nieco krótsze i być może łatwiejsze do zrozumienia niż '({})'.format(variable). Ale wciąż mam wątpliwości. Czy to właściwe (pythonic?) Używać obu podejść w kodzie? Dziękuję.Python 3: używanie% s i .format()

+0

Formatowanie"% "jest nieco szybsze. Ale jeśli robisz tak dużo formatowania ciągów, że ma to znaczenie, prawdopodobnie masz inne ważniejsze sprawy. –

Odpowiedz

24

Dokumentacja w Pythonie 3.2 mówi, że % ostatecznie zniknie.

http://docs.python.org/3.2/tutorial/inputoutput.html#old-string-formatting

Od str.format() jest dość nowy, dużo kodu Pythona nadal używa operatora % . Jednakże, ponieważ ten stary format formatowania zostanie ostatecznie usunięty z języka, str.format() powinien być użyty jako.

Ale jak @regilero says, zdanie jest już od 3,3, co może sugerować, że nie jest to rzeczywiście sprawa. Jest kilka rozmów here, które sugerują to samo.

Od Python 3.4 the paragraph 7.1.1 brzmi:

Operator% może być również używany do formatowania strun. Interpretuje on lewy argument podobnie jak łańcuch formatu sprintf(), który ma być zastosowany do prawego argumentu, i zwraca łańcuch wynikający z tej operacji formatowania.

Zobacz także Python 3.4 4.7.2 printf-style String Formatting.

+0

Dziękuję bardzo za odpowiedź, Vlad. Rzeczywiście, mówią, że w dokumentacji, ale nawet standardowa biblioteka 3.x jest zalewana formatowaniem "%" :(Wydaje się, że nie ma aż tak wielu oznak pozbycia się '%' w ogóle. przyklejenie do '.format()' wydaje się być w porządku :) –

+3

To zdanie zostało usunięte w dokumentacji python 3.3, było tam jeszcze w wersji 3.2 http://docs.python.org/3.2/tutorial/inputoutput.html#old-string -formatowanie – regilero

+0

To są świetne wieści! – Jon

-2

"% s" jest teraz "{}", więc insted dodawania% s zastąpić go {} gdzie chcesz dodać zmienną do łańcucha.

def main(): 
    n="Python 3.+" 
    l="looks nice" 
    f="does not look practical." 


    print("This seems to be the new way {}".format(n)\ 
     + "will be working, rather than the ' % ',{} but {}".format(l,f)) 



main() 

#In comparison to just injecting the variable 

Wyjście lekceważyć cytaty są one w celach ilustracyjnych

„To wydaje się być nową drogę«Python 3. +» będą pracować, zamiast„% ;, «ładnie wygląda» ale "nie wygląda praktycznie". "

+5

Dodaj wyjaśnienie tej odpowiedzi. – Andrei