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

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
Nie podano opisu zmian
Piotr (dyskusja | edycje)
przetłumaczone
Linia 1:
{{WEdycji}}
 
{{Podświetl|py}}
== Formatowanie napisów w oparciu o słowniki ==
Linia 25 ⟶ 23:
 
'''Przykład 8.14. Formatowanie napisu w <tt>BaseHTMLProcessor.py</tt>'''
<nowiki>
 
def handle_comment(self, text):
self.pieces.append("<!--%(text)s-->" % locals()) #(1)
</nowiki>
 
# UsingFormatowanie theza built-inpomocą localssłowników functionjest isbardzo thepowszechnie mostużywane commonz usewbudowaną offunkcję dictionary-based string formatting<tt>locals</tt>. ItOznacza means that you canto, useże themożesz nameswykorzystywać ofnazwy localzmiennych variableslokalnych withinwewnątrz yourswojego stringnapisu (inw thistym caseprzypadku, <tt>text</tt>, whichktóry waszostał passedprzykazany tojako the class methodargument asdo anmetody argumentklasy) and each namedi variablekażda willnazwa bezmiennej replacedzostanie byzastąpiona itsjej valuewartością. IfJeśli <tt>text</tt> isprzechowuje wartość <tt>'Begin page footer'</tt>, the stringformatowany formattingnapis <tt><nowiki>"<!--%(text)s-->"</nowiki> % locals()</nowiki></tt> willzostanie resolve towygenerowany the stringjako <tt><nowiki>'<!--Begin page footer-->'</nowiki></tt>.
 
'''ExamplePrzykład 8.15. MoreWięcej dictionary-basedformatowania stringopartego formattingna słownikach'''
 
def unknown_starttag(self, tag, attrs):
Linia 37 ⟶ 36:
self.pieces.append("<%(tag)s%(strattrs)s>" % locals()) #(2)
 
# Kiedy metoda ta zostaje wywołana, <tt>attrs</tt> jest listą krotek postaci klucz/wartość, podobnie jak zwrócona wartość metody słownika <tt>items</tt>, a co oznacza, że możemy wykorzystać wielozmienne przypisanie, aby ją przeiterować. Powinieneś już być zaznajomiony z wzorcami, ale tutaj wykonujemy wiele operacji, więc prześledźmy je po kolei:
# When this method is called, attrs is a list of key/value tuples, just like the items of a dictionary, which means you can use multi-variable assignment to iterate through it. This should be a familiar pattern by now, but there's a lot going on here, so let's break it down:
## SupposePrzypuśćmy, że <tt>attrs</tt> iswynosi [('href', 'index.html'), ('title', 'Go to home page')].
## InW thepierwszym firstprzebiegu roundodwzorowywania of the list comprehensionlisty, <tt>key</tt> willweźmie getwartość <tt>'href', anda <tt>value</tt> willweźmie getwartość <tt>'index.html'</tt>.
## TheFormatowanie string formattingnapisu <tt>' %s="%s"' % (key, value)</tt> willprzekształci resolvesię tona <tt>' href="index.html"'</tt>. ThisNapis stringten becomesbędzie thepierwszym firstelementem elementzwróconej of the list comprehension's return valuelisty.
## InW thedrugim second roundprzebiegu, <tt>key</tt> willprzyjmie getwartość <tt>'title'</tt>, anda <tt>value</tt> will getwartość <tt>'Go to home page'</tt>.
## TheFormatowanie stringnapisu formattingprzekształci willto resolve tona <tt>' title="Go to home page"'</tt>.
## ThePo listwykonaniu comprehensionwyrażenia returnslistowego, azwrócona listlista ofbędzie theseprzechowywała twote resolveddwa stringswygenerowane napisy, anda <tt>strattrs</tt> willbędzie joinpołączeniem bothobydwu elementstych of thiselementów, listczyli together tobędzie formprzechowywał <tt>' href="index.html" title="Go to home page"'</tt>.
# Now,Teraz formatując usingnapis dictionary-basedza stringpomocą formattingsłownika, youwstawiamy insertwartość the value ofzmiennej <tt>tag</tt> andi <tt>strattrs</tt> intodo a stringnapisu. SoZatem ifjeśli <tt>tag</tt> iswynosił <tt>'a'</tt>, thew finalostateczności resultotrzymamy would bewynik <tt><nowiki>'<a href="index.html" title="Go to home page">',</nowiki></tt> andi thatto isnastępnie whatdodajemy gets appended todo <tt>self.pieces</tt>.
 
{{Uwaga|
Korzystanie z formatowania napisu za pomocą słownika i funkcji <tt>locals</tt> jest wygodnym sposobem, aby tworzyć czytelniejsze skomplikowane wyrażenia listowa, lecz trzeba zapłacić pewną cenę. Jest tutaj drobny narzut wydajności, a jest to związane z wywołanie funkcji <tt>locals</tt>, ponieważ <tt>locals</tt> wykonuje kopię lokalnej przestrzeni nazw.
Using dictionary-based string formatting with locals is a convenient way of making complex string formatting expressions more readable, but it comes with a price. There is a slight performance hit in making the call to locals, since locals builds a copy of the local namespace.
}}