Więc mam ten problem. Mam krotkę (1,2,3), którą powinienem wydrukować z formatowaniem ciągów. na przykład.
tup = (1,2,3)
print "this is a tuple %something" % (tup)
a to powinno wypisać reprezentację krotki w nawiasach, jak
To jest krotka (1, 2, 3)
Ale TypeError: not all arguments converted during string formatting
zamiast tego dostaję .
Jak, u licha, jestem w stanie to zrobić? Trochę się tu zgubiłem, więc gdybyście mogli wskazać mi właściwy kierunek :)
print(....)
.Zauważ, że
%
składnia jest przestarzała. Użyjstr.format
, która jest prostsza i bardziej czytelna:źródło
%
jest przestarzały, ale teraz istr.format
tak zawsze ty , na ślepo. Nieważne, interesuje mnie, czym jest pełny kwalifikator, ponieważ prosty{0}
nie jest pełnym kwalifikatorem, a jedynie wskaźnikiem pozycji. Dlaint
tego, co nazywam pełnym kwalifikatorem, byłoby{0:d}
(lub{3:d}
na przykład, jeśli int do wydrukowania występuje na czwartej pozycji wstr.format
metodzie). Próbowałem wydrukować krotkę za pomocą{0:s}
kwalifikatora, ale to nie działa. Więc jaki jest pełny kwalifikator czegoś takiego jak krotka?str
, możesz powiedzieć{!s}
, ale jest to ustawienie domyślne, więc nie jest to konieczne. Jeśli chcesz użyćrepr
zamiast tego, możesz to zrobić{!r}
. W przeciwieństwie do z%
, nie ma potrzeby mówićd
o liczbach całkowitych.%
nie jest on całkowicie przestarzały. W rzeczywistościpylint
będzie nawet narzekać, jeśli użyjesz.format
składni wlogging
module: stackoverflow.com/a/34634301/534238Wiele odpowiedzi udzielonych powyżej było poprawnych. Właściwy sposób to:
Jednak spór dotyczył tego, czy
'%'
operator ciągu znaków jest przestarzały. Jak wielu zauważyło, zdecydowanie nie jest przestarzały, ponieważ'%'
operator String łatwiej jest połączyć instrukcję String z danymi listy.Przykład:
Jednak używając tej
.format()
funkcji, otrzymasz pełną instrukcję.Przykład:
Co więcej,
'%'
operator również przydatny dla nas, aby potwierdzić typ danych, takich jak łańcuch%s
,%d
,%i
, podczas gdy .format () obsługuje tylko dwie flagi konwersji :'!s'
a'!r'
.źródło
.format
:tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
.Zwróć uwagę, że
(tup,)
jest to krotka zawierająca krotkę. Zewnętrzna krotka jest argumentem operatora%. Wewnętrzna krotka to jej zawartość, która jest faktycznie drukowana.(tup)
jest wyrażeniem w nawiasach, które po ocenie dajetup
.(tup,)
z końcowym przecinkiem jest krotką, która zawieratup
jako jedyny element członkowski.źródło
To nie używa formatowania ciągów, ale powinieneś być w stanie to zrobić:
Jeśli naprawdę chcesz użyć formatowania ciągów:
Uwaga, zakłada się, że używasz wersji Pythona wcześniejszej niż 3.0.
źródło
źródło
Chociaż to pytanie jest dość stare i ma wiele różnych odpowiedzi, nadal chciałbym dodać najbardziej „pytoniczną”, a także czytelną / zwięzłą odpowiedź.
Ponieważ ogólna
tuple
metoda drukowania jest już poprawnie pokazana przez Antimony, jest to dodatek do drukowania każdego elementu w krotce osobno, jak Fong Kah Chun poprawnie pokazał%s
składnię.Co ciekawe, wspomniano o tym tylko w komentarzu, ale użycie operatora gwiazdki do rozpakowania krotki daje pełną elastyczność i czytelność przy zastosowaniu
str.format
metody przy oddzielnym drukowaniu elementów krotki .Pozwala to również uniknąć drukowania końcowego przecinka podczas drukowania jednoelementowej krotki, co jest omijane przez Jacob CUI z
replace
. (Nawet jeśli reprezentacja imho na końcu przecinka jest poprawna, jeśli chcesz zachować reprezentację typu podczas drukowania ):źródło
Myślę, że najlepszym sposobem na to jest:
Jeśli znasz formatowanie w stylu printf , to Python obsługuje własną wersję. W Pythonie odbywa się to za pomocą operatora „%” zastosowanego do łańcuchów (przeciążenie operatora modulo), który pobiera dowolny ciąg i stosuje do niego formatowanie w stylu printf.
W naszym przypadku każemy mu wypisać "To jest krotka:", a następnie dodać ciąg "% s", a dla rzeczywistego ciągu przekazujemy ciąg reprezentujący krotkę (przez wywołanie str ( t)).
Jeśli nie jesteś zaznajomiony z formatowaniem w stylu printf, bardzo polecam naukę, ponieważ jest to bardzo standardowe. Większość języków obsługuje to w taki czy inny sposób.
źródło
Pamiętaj, że na końcu krotki zostanie dodany przecinek, jeśli krotka zawiera tylko jeden element. na przykład:
a otrzymasz:
w niektórych przypadkach np. chcesz otrzymać listę w cudzysłowie do użycia w ciągu zapytania mysql, np
musisz wziąć pod uwagę, aby usunąć przecinek kończący, użyj replace (',)', ')') po sformatowaniu, ponieważ jest możliwe, że krotka ma tylko 1 element, taki jak ('Tom',), więc przecinek kończący musi zostać usunięty:
Proszę zasugerować, czy masz przyzwoity sposób na usunięcie tego przecinka z wyniku.
źródło
format()
w zapytaniach do bazy danych. W każdej bibliotece istnieją odpowiednie metody.format()
z wartościami zebranymi od użytkowników może skutkować iniekcją SQL. Bezpieczniej jest sprawdzić poprawność wartości wejściowych przed umieszczeniem ich w zapytaniu. Więcej informacji można znaleźć w tych wskazówkach: dev.mysql.com/doc/connector-python/en/… Można także rzutować wartości parametrów na reprezentację typu ciągu bazy danych, a następnie wkleić je do ciągu zapytania. Spójrz na initd.org/psycopg/docs/usage.html, gdzie masz kontrprzykład z%
operatorem i rozwiązanie zexecute()
metodą, w której parametry zapytania są przekazywane w argumentach metody.Oprócz metod zaproponowanych w innych odpowiedziach, od Pythona 3.6 można również używać interpolacji literalnych ciągów (f-strings):
źródło
Spróbuj tego, aby uzyskać odpowiedź:
Jeśli umieścimy tylko jedną krotkę wewnątrz (), sama utworzy krotkę:
Oznacza to, że powyższa instrukcja print będzie wyglądać następująco: print ("Wartość:% s"% ('1', '2')), co jest błędem!
W związku z tym:
Powyższe zostanie poprawnie wprowadzone do argumentów wydruku.
źródło
Dla Pythona 3
źródło
Możesz też spróbować tego;
Nie możesz używać tylko
%something
z(tup)
powodu koncepcji pakowania i rozpakowywania z krotką.źródło
Rozmowa jest tania, pokaż kod:
źródło