Zanurkuj w Pythonie/Formatowanie łańcucha znaków

Z Wikibooks, biblioteki wolnych podręczników.

Formatowanie łańcucha znaków[edytuj]

W Pythonie możemy formatować wartości wewnątrz łańcucha znaków. Chociaż możemy tworzyć bardzo skomplikowane wyrażenia, jednak najczęściej w prostych przypadkach wystarczy wykorzystać pole %s, aby wstawić pewien łańcuch znaków wewnątrz innego.

Przykład. Pierwsza próba formatowania łańcucha
>>> k = "uid"
>>> v = "sa"
>>> "%s=%s" % (k, v)                        #(1)
'uid=sa'
  1. Rezultatem wykonania tego wyrażenia jest łańcuch znaków. Pierwsze %s zostało zastąpione wartością znajdującą się w k, a drugie wystąpienie %s zostało zastąpione wartością v. Wszystkie inne znaki (w tym przypadku znak równości) pozostały w miejscach, w których były.

Zauważmy, że (k, v) jest krotką. Niedługo zobaczymy, do czego to może być przydatne.

Mogłoby się wydawać, że formatowanie jest jedną z wielu możliwości połączenia łańcuchów znaków, jednak formatowanie łańcucha znaków nie jest tym samym co łączenie łańcuchów.

Przykład. Formatowanie tekstu a łączenie
>>> uid = "sa"
>>> pwd = "secret"
>>> print (pwd + " nie jest poprawnym hasłem dla " + uid)                #(1)
secret nie jest poprawnym hasłem dla sa
>>> print ("%s nie jest poprawnym hasłem dla %s" % (pwd, uid))           #(2)
secret nie jest poprawnym hasłem dla sa
>>> userCount = 6
>>> print ("Użytkowników: %d" % (userCount, ))                     #(3) (4)
Użytkowników: 6
>>> print ("Użytkowników: " + userCount)                           #(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
  1. + jest operatorem łączącym łańcuchy znaków.
  2. W tym trywialnym przypadku formatowanie daje ten sam wynik co łączenie.
  3. (userCount, ) jest jednoelementową krotką. Składnia ta wygląda trochę dziwnie, jednak takie oznaczenie jest jednoznaczne i wiadomo, że chodzi o krotkę. Zawsze można dołączać przecinek po ostatnim elemencie listy, krotki lub słownika. Jest on jednak wymagany tylko podczas tworzenia jednoelementowej krotki. Jeśli przecinek nie byłby wymagany, Python nie mógłby stwierdzić czy (userCount) ma być krotką, czy też tylko wartością zmiennej userCount.
  4. Formatowanie łańcucha znaków działa z liczbami całkowitymi. W tym celu używamy %d zamiast %s.
  5. Spróbowaliśmy połączyć łańcuch znaków z czymś, co nie jest łańcuchem znaków. Został rzucony wyjątek. W przeciwieństwie do formatowania, łączenie łańcucha znaków możemy wykonywać jedynie na innych łańcuchach.

Tak jak sprintf w C, formatowanie tekstu w Pythonie przypomina szwajcarski scyzoryk. Mamy mnóstwo opcji do wyboru, a także wiele pól dla różnych typów wartości.

Przykład. Formatowanie liczb
>>> print ("Dzisiejsza cena akcji: %f" % 50.4625)          #(1)
Dzisiejsza cena akcji: 50.462500
>>> print ("Dzisiejsza cena akcji: %.2f" % 50.4625)        #(2)
Dzisiejsza cena akcji: 50.46
>>> print ("Zmiana w stosunku do dnia wczorajszego: %+.2f" % 1.5)        #(3)
Zmiana w stosunku do dnia wczorajszego: +1.50
  1. Pole formatowania %f traktuje wartość jako liczbę rzeczywistą i pokazuje ją z dokładnością do 6 miejsc po przecinku.
  2. Modyfikator ".2" pola %f umożliwia pokazywanie wartości rzeczywistej z dokładnością do dwóch miejsc po przecinku.
  3. Można nawet łączyć modyfikatory. Dodanie modyfikatora + pokazuje plus albo minus przed wartością, w zależności od tego jaki znak ma liczba. Modyfikator ".2" został na swoim miejscu i nadal nakazuje wyświetlanie liczby z dokładnością dwóch miejsc po przecinku.

Materiały dodatkowe[edytuj]