Zanurkuj w Pythonie/Potęga introspekcji: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Zdzichobot (dyskusja | edycje) zamiana ProstaNawigacja->Subst:ProstaNawigacja |
mNie podano opisu zmian |
||
Linia 1:
W tym rozdziale
{{Podświetl|py}}▼
▲W tym rozdziale dowiesz się o jednej z mocnych stron Pythona - introspekcji. Jak już wiesz, [[../Wszystko jest obiektem|wszystko w Pythonie jest obiektem]], natomiast introspekcja jest kodem, który postrzega funkcje i moduły znajdujące się w pamięci jako obiekty, a także pobiera o nich informacje i operuje 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; korzystamy tu z koncepcji, które wykorzystywaliśmy już w [[Python/Twój pierwszy program|rozdziale drugim]]. Nie przejmuj się, jeżeli nie rozumiesz części tego programu. W rozdziale tym wszystkiego się jeszcze nauczysz.
{{Python/Przykład
def info(object, spacing=10, collapse=1): #(1) (2) (3)▼
|4.1|{{Python/Src|apihelper.py}}
|tekst=
methodList = [method for method in dir(object) if callable(getattr(object, method))]▼
"""Wypisuje metody i ich notki dokumentacyjne.
processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)▼
print "\n".join(["%s %s" %▼
Argumentem może być moduł, klasa, lista, słownik, czy też łańcuch znaków."""
▲ processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
▲ print "\n".join(["%s %s" %
(method.ljust(spacing),
processFunc(str(getattr(object, method).__doc__)))
for method in methodList])
if __name__ == "__main__":
print info.__doc__
# Ten moduł ma jedną funkcję <
# Funkcja <
# Kod wewnątrz funkcji jest [[../Wcięcia kodu|wcięty]].
# [[../Testowanie modułów|Sztuczka]] z <
# [[../Testowanie modułów|Instrukcja <
}}
Funkcja <
'''Przykład 4.2. Proste zastosowanie <tt class="lang-none">apihelper.py</tt>'''▼
{{Python/Przykład
|tekst=
>>> from apihelper import info
>>> li = []
>>> info(li)
{{samp|append L.append(object) -- append object to end
count L.count(value) -> integer -- return number of occurrences of value
extend L.extend(list) -- extend list by appending list elements
Linia 40 ⟶ 44:
remove L.remove(value) -- remove first occurrence of value
reverse L.reverse() -- reverse *IN PLACE*
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.
{{Python/Przykład
|tekst=
>>> import odbchelper
>>> info(odbchelper)
{{samp|buildConnectionString Build a connection string from a dictionary Returns string.}}
>>> info(odbchelper, 30)
{{samp|buildConnectionString Build a connection string from a dictionary Returns string.}}
>>> info(odbchelper, 30, 0)
{{samp|buildConnectionString Build a connection string from a dictionary
Returns string.}}
}}
<noinclude>
{{Nawigacja|../|
Linia 60 ⟶ 68:
[[../Użycie argumentów opcjonalnych i nazwanych|Użycie argumentów opcjonalnych i nazwanych]]|
}}
▲{{Podświetl|py}}
</noinclude>
|