Zanurkuj w Pythonie/Formatowanie napisów w oparciu o słowniki: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
m techn.
Fservant (dyskusja | edycje)
m Poprawionych kilka drobnych błędów (interpunkcyjnych, gramatycznych, semantycznych).
Linia 3:
Dlaczego uczyliśmy się na temat funkcji <code>locals</code> i <code>globals</code>? Ponieważ teraz możemy się nauczyć formatowania napisów w oparciu o słowniki. Jak już mówiliśmy, [[../Formatowanie łańcucha znaków|regularne formatowanie napisów]] umożliwia w łatwy sposób wstawianie wartości do napisów. Wartości są wyszczególnione w krotce i w odpowiednim porządku wstawione do napisu, gdzie występuje pole formatujące. O ile jest to skuteczne, nie zawsze tworzy kod łatwy do czytania, zwłaszcza, gdy zostaje wstawianych wiele wartości. Żeby zrozumieć o co chodzi, nie wystarczy po prostu jednorazowo prześledzić napis; trzeba ciągle skakać między czytanym napisem, a czytaną krotką wartości.
 
TutajMamy mamytutaj alternatywną formęmetodę formatowania napisu, awykorzystującą którasłowniki zamiast krotek wykorzystuje słowniki.
 
{{Python/Przykład
Linia 41:
self.pieces.append("<%(tag)s%(strattrs)s>" % locals()) #(2)
 
# Kiedy metoda ta zostaje wywołana, <code>attrs</code> jest listą krotek postaci klucz/wartość, podobnie jak zwrócona wartość [[../Odwzorowywanie listy#przy-3.28|metody słownika <code>items</code>]], a to oznacza, że możemy wykorzystać [[../Deklarowanie zmiennych#Wielozmienne przypisania|wielozmienne przypisanie]], aby wykonać na niej iterację. Powinniśmy już być zaznajomieni z tymi operacjami, ale jestwystępuje tuich tegotutaj trochę dużosporo, więc prześledźmy je po kolei:
## Przypuśćmy, że <code>attrs</code> wynosi [('href', 'index.html'), ('title', 'Idź do strony domowej')].
## W pierwszym przebiegu odwzorowywania listy, <code>key</code> przyjmie wartość <code>'href'</code>, a <code>value</code> weźmie wartość <code>'index.html'</code>.
Linia 47:
## W drugim przebiegu, <code>key</code> przyjmie wartość <code>'title'</code>, a <code>value</code> wartość <code>'Idź do strony domowej'</code>.
## Formatowanie napisu przekształci to na <code>' title="Idź do strony domowej"'</code>.
## Po wykonaniu wyrażenia listowego, zwrócona lista będzie przechowywała te dwa wygenerowane napisy, a <code>strattrs</code> będzie połączeniem obydwu tych elementów, czyli będzie przechowywał <code>' href="index.html" title="Go to home page"'</code>.
# Teraz formatując napis za pomocą słownika, wstawiamy wartość zmiennej <code>tag</code> i <code>strattrs</code> do napisu. Zatem jeśli <code>tag</code> wynosił <code>'a'</code>, w ostateczności otrzymamy wynik <code><nowiki>'<a href="index.html" title="Idź do strony domowej'">'</nowiki></code> i to następnie dodajemy do <code>self.pieces</code>.
}}
 
{{Uwaga|
Korzystanie zze słownikowego formatowania napisu i funkcji <code>locals</code> jest wygodnym sposobem, aby tworzyć czytelniejsze skomplikowane wyrażenia listowe uczynić czytelniejszymi, lecz trzebama zapłacićto pewnąswoją cenę. JestWystępuje tutaj drobny narzut wydajności związany z wywołaniem funkcji <code>locals</code>, ponieważ <code>locals</code>wykonuje wykonujeona kopię lokalnej przestrzeni nazw.
}}