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()
Odpowiedz
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.
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 :) –
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
To są świetne wieści! – Jon
"% 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". "
Dodaj wyjaśnienie tej odpowiedzi. – Andrei
- 1. tłumaczenia C++ 'Format s sprintf ciąg C#' s string.Format
- 2. Python, .format() i UTF-8
- 3. Sprawdź format ciągów python?
- 4. używania% s Format specifier z boost :: formatu i std :: string
- 5. Python 3 bajty formatowania
- 6. Python 2 i Python 3 __cmp__
- 7. Python - Virtualenv, python 3?
- 8. autorytatywne wyrażenie regularne dla (s) printf format ciąg
- 9. errors.full_messages format in rail 3
- 10. Python 3 regex z znakami diakrytycznymi i ligaturami,
- 11. Python lista Format z MySQLdb
- 12. python .format() powtórzone pola?
- 13. Format Python rzuci KeyError
- 14. Yii2 Zobacz DateTime Format (DMY H: i: s), ale kiedy zapisać/UPDATE DB Change formacie Ymd H: i: s
- 15. format datetime python z "st", "nd", "rd", "th" (angielski porządek porządkowy) jak PHP "S"
- 16. Django, Python 3 i Postgres - mod_wsgi numer
- 17. Python 3 - sprawdza sendto() Sukces
- 18. JQuery Validation i MVC 3. Jak zmienić format daty
- 19. Python 2 i 3 're.sub' niespójność
- 20. Python 3, easy_install, pip i pypi
- 21. Python 3 Pobierz i przeanalizuj JSON API
- 22. Python i ttk Używanie labelFrames do czyszczenia ramki
- 23. format ciągów python dla zmiennych długości krotek
- 24. Używanie PhantomJS z Selenium Webdriver i Python
- 25. Jquery Datepicker Rails 3 format daty wydania
- 26. Python C API: Używanie PyEval_EvalCode
- 27. Szyny 3, tylko format daty wyświetlania?
- 28. Python 3 setuptools na mac
- 29. Expat parsowania w python 3
- 30. Python 3 zastąpienie ftputil?
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. –