Zanurkuj w Pythonie/Potęga introspekcji: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m poprawa nawigacji
Piotr (dyskusja | edycje)
m poprawki
Linia 1:
{{Podświetl|py}}
W tym rozdziale dowiesz się o jednej z właściwości Pythona: '''- introspekcji'''. Jak już wiesz, [[../Wszystko jest obiektem|wszystko w Pythonie jest obiektem]], anatomiast introspekcja tojest kodkodem, któregoktóry zadaniempostrzega jestfunkcje obserwacjai innychmoduły modułówznajdujące i funkcjisię w pamięci jako obiektówobiekty, pobieraniea informacjitakże pobiera o nich orazinformacje i operowanieoperuje nimi.
 
== Nurkujemy ==
Zacznijmy od kompletnego, działającego programu. Przeglądając kod na pewno rozumiesz już niektóre jego fragmenty. Przy niektórych liniach znajdują się liczby w komentarzach.; Liniekorzystamy tu z koncepcji, tektórą wytłumaczyliśmywykorzystywaliśmy już w [[Programowanie:Python:/Twój pierwszy program|rozdziale drugim]]. Nie przejmuj się, jeżeli nie rozumiesz resztyczęści programu. WłaśnieW zaczniemyrozdziale siętym gowszystkiego się uczyćnauczysz.
W tym rozdziale dowiesz się o jednej z właściwości Pythona: '''introspekcji'''. Jak już wiesz, wszystko w Pythonie jest obiektem a introspekcja to kod, którego zadaniem jest obserwacja innych modułów i funkcji w pamięci jako obiektów, pobieranie informacji o nich oraz operowanie nimi.
 
'''Przykład 4.1. <tt class="lang-none">apihelper.py</tt>'''
Zacznijmy od kompletnego, działającego programu. Przeglądając kod na pewno rozumiesz już niektóre jego fragmenty. Przy niektórych liniach znajdują się liczby w komentarzach. Linie te wytłumaczyliśmy już w [[Programowanie:Python:Twój pierwszy program|rozdziale drugim]]. Nie przejmuj się, jeżeli nie rozumiesz reszty programu. Właśnie zaczniemy się go uczyć.
 
Przykład 4.1. apihelper.py
 
def info(object, spacing=10, collapse=1): #(1) (2) (3)
"""Drukuje metody i dokumentacje.<br>
Zastosowanie dla modulow, klas, list, slownikow lub lancuchow znakow."""
methodList = [method for method in dir(object) if callable(getattr(object, method))]
Linia 18 ⟶ 19:
print info.__doc__
# Ten moduł ma jedną funkcję <tt>info</tt>. PobieraZgodnie trzyze parametryswoją [[../Deklarowanie funkcji|deklaracją]], wymaga ona trzech argumentów: <tt>object</tt>, <tt>spacing</tt> oraz <tt>collapse</tt>. Dwa ostatnie parametry są opcjonalne., Więcej o tymco za chwilę zobaczysz.
# Funkcja <tt>info</tt> posiada dokumentacjęwieloliniowy opisującą[[../Dokumentowanie funkcji|napis dokumentacyjny]], który opisuje jej zastosowanie. Zauważ, że funkcja nie jestzwraca zwracanażadnej żadna wartośćwartości. Ta funkcja używana będzie dowykorzystywana, wypisywaniaaby informacjiwykonać (<tt>print</tt>)pewną czynność, a nie żeby otrzymać pewną wartość.
# Kod wewnątrz funkcji jest [[../Wcięcia kodu|wcięty]].
#Zauważ wcięcia w kodzie.
# [[../Testowanie modułów|Sztuczka]] z <tt>if __name__</tt> pozwala wykonać programowi coś użytecznego, kiedy jestzostanie uruchamianyuruchamiony samodzielnie,. aKod pod tą istrukcją nie zostanie wykonany, jeśli kod ten wykorzystamy jako moduł w innym programie. W tym wypadku program wypisuje po prostu opisnapis dokumentacyjny (dokumentacjętzw. ''docstring'') funckji <tt>info</tt>.
# [[../Testowanie modułów|Wyrażenie <tt>if</tt>]] wykorzystuje <tt>==</tt> (dwa znaki równości), dlaaby porównania,porównać dwie wartości. W istrukcji <tt>if</tt> nie mamusimy korzystać potrzebyz stosowaćnawiasów cudzysłowówokrągłych.
 
Funkcja <tt>info</tt> zaprojektowana została dla ułatwienia pracyzaprojektowana programiścietak, podczasaby pracyułatwić ztobie Pythonpracę w IDE Pythona. PobieraIDE jakikolwiekbierze jakiś obiekt, który posiada funkcje lub metody (jak na przykład moduł zawierający funkcje lub listę, która posiada metody) i wyświetla funkcje i ich dokumentacjenapisy dokumentacyjne.
 
'''Przykład 4.2. Proste zastosowanie <tt class="lang-none">apihelper.py</tt>'''
 
>>> from apihelper import info
Linia 41 ⟶ 42:
sort L.sort([cmpfunc]) -- sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1
 
Domyślnie wynik jest formatowany tak, by był łatwy do odczytania. DokumentacjeNapisy dokumentacyjne składające się z wielu linii zamieniane są na jednoliniowe, ale opcjamożemy tazmienić może zostaćopcję zmieniona wstawiającustawiając wartość <tt>0</tt> dodla argumentu <tt>collapse</tt>. Jeżeli nazwa funkcji jest dłuższa niż ''10 znaków'', możesz określić inną wartość dla argumentu <tt>spacing</tt>, by ułatwić sobie czytanie.
 
Przykład 4.3. Zaawansowane użycie apihelper.py
 
'''Przykład 4.3. Zaawansowane użycie <tt class="lang-none">apihelper.py</tt>'''
>>> import odbchelper
>>> info(odbchelper)
Linia 57:
<noinclude>
{{ProstaNawigacja|
poprzart=Python../Wbudowane typy danych/Podsumowanie|
poprz=Podsumowanie|
spis=Python../|
nastart=Python../Użycie argumentów opcjonalnych i nazwanych|
nast=Użycie argumentów opcjonalnych i nazwanych}}