Do tej pory widzieliśmy parę struktur danych w Pythonie: łańcuchy i listy. Każdą z nich obsługuje kilka metod, które są rodzajami funkcji.
Na przykład jedną z metod list
jest metoda reverse()
. Jak sama nazwa wskazuje, odwraca listę (na przykład, pierwsza pozycja staje się ostatnią i vice versa). Metodę można wywołać używając kropki (.
) i struktury jak poniżej:
«objectName».«methodName»(«list of arguments, if any»)
Dla porównania, składnia, którą widzieliśmy już w przypadku wywołania funkcji była następująca
«functionName»(«list of arguments, if any»)
Oto przykład wywołania dla listy reverse
.
Przykładem metody, która ma argument jest str.startswith
:
Wiele Metod
Poniżej wymieniono najczęstsze metody klas łańcuchów i list. Są to głównie zadania, które powinieneś być w stanie napisać samodzielnie; użycie standardowych metod ma tę zaletę, że ułatwia innym osobom czytanie i edycję kodu.
Listy
Metody te nie zmieniają listy:
list.index(X)
: znajdź X na liście. Konkretnie, przeszukując wszystkie elementy zwraca takiei
, żelist[i]==X
. Zwracane jest najmniejszei
. JeśliX
nie istnieje na liście, wtedy swoduje toValueError
.X in list
zwróciTrue
jeśliX
jest elementem listy, w przeciwnym wypadku zwróciFalse
. Dzięki temu można uniknąć wystąpienia błęduValueError
. (Uwaga,in
jest operatorem, nie metodą.)
list.count(X)
: zwraca liczbę, ile razyX
pojawisię na liście.
Metody te zmieniają listę:
list.append(X)
dodajeX
na końcu listylist
list.insert(i, X)
dodajeX
nai
-tej pozycjilist.extend(L)
dodaje listęL
na końculist.remove(X)
usuwa pierwsze wystąpieniX
z listylist.pop(i)
zwraca & usuwa elementlist[i]
, natomiastlist.pop()
zwraca & usuwa ostatni elementdel list[i]
zwracai
-ty element zlist
i usuwa go (Uwaga, wyrażenie "del
statement", nie jest metodą)list.reverse()
odwraca listęlist.sort()
sortuje listę
Wszystkie powyższe metody z wyjątkiem pop
zwracają None. Niektóre z tych funkcji mogą być również wywołane z nieco innymi argumentami; szczegółowe informacje znajdują się w sekcji dotyczącej metod list w dokumentacji Python. Listy obsługują także złożone podzakresy zwane "plastrami", które umożliwiają wstawianie i usuwanie całych podlist, podobnie jak zstring[x:y:z]
wykonany w wykonany lekcjach.
Łańcuchy
Podobnie jak dla list, możesz używać in
, index
i count
dla łańcuchów. Dają one więcej możliwości, ponieważ działają na podciagach, a nie tylko na pojedynczych znakach:
S in T
jest boolowskim wskaźnikiem, czy łańcuchS
jest podłańcuchem łańcuchaT
S.index(T)
znajduje pierwszy indeksS
, gdzieT
jest podłańcuchemS.count(T)
podaje liczbę wystąpień nieprzerwanychT
jako podłańcuchaS
Oto niektóre z najpopularniejszych metod str
:
- Letter case:
capitalize, lower, upper, islower, isupper
- Characters:
isalpha, isdigit
- Padding:
center, ljust, rjust
;strip
usuwa padding - Substrings:
endswith, startswith, find, replace
- Parsing:
split, splitlines
W razie potrzeby przedstawimy je bardziej szczegółowo. Pełną szczegółową listę metody łańcucha podano w dokumentacji Python.
Łańcuchy są niezmienne. Wspomnęliśmy list.reverse()
, która zmienia listę, odwracając ją, ale tutaj nie ma tej metody str.reverse()
. Dzieje się tak, ponieważ obiekty łańcuchowe nie mogą być modyfikowane po ich utworzeniu. W lekcji 17 wyjaśnimy nieco więcej na ten temat.
Oto przykład metody łańcucha: S.replace(old, new)
zwraca zmodyfikowaną wersję S
, gdzie każde wystąpienie starego
podłańcucha zostało zastąpione nowym
. Powoduje to utworzenie nowego łańcucha bez zmiany starego:
W następnym ćwiczeniu przydatne będą następujące metody:
• str.replace, którą właśnie opisaliśmy
• metoda typu boolowskiego str.isalpha (), która zwraca True, jeśli str jest łańcuchem (lub znakiem) składającym się wyłącznie z liter
• metoda typu boolean str.isdigit (), która zwraca wartość True, jeśli str jest łańcuchem (lub znakiem) składającym się wyłącznie z cyfr
• str.upper (), która zwraca wersję łańcucha str konwertowaną na wielką literę.
str.replace
, którą właśnie opisaliśmy- metoda boolowska
str.isalpha()
, która zwracaTrue
, jeślistr
jest łańcuchem (lub znakiem) składającym się wyłącznie z liter - metoda boolowska
str.isdigit()
, która zwraca wartośćTrue
, jeślistr
jest łańcuchem (lub znakiem) składającym się wyłącznie z cyfr str.upper()
która zwraca wersję łańcuchastr
konwertowaną do wielkich liter
Reszta tej lekcji ma techniczny charakter i jej treść nie jest wymagana do realizacji pozostałych lekcji. |
Więcej o obiektach
Poznając Pythona, napotkasz więcej klas niż tylko ciągi i listy. Inne, które prawdopodobnie okażą się przydatne, to file objects, sets i dictionaries. Wszystkie mają wiele przydatnych metod. Możesz poleceniem poprosić Pythona o wszystkie metody danego obiektu używając funkcji dir
:
Patrzenie na właściwości obiektu nazywa się introspekcją. Wszystko w Pythonie może mieć metody:
Niektóre wpisy w dir
są w zasadzie member variables (zmiennymi składowymi) a nie metodami, na przykład int.denominator
jest liczbą, a nie funkcją. Technicznie, w Pythonie funkcje są obiektami więc funkcje składowe są szczególnym przypadkiem zmiennych składowych.
Możesz również przeprowadzić introspekcję modułów. Jeśli zaimportujesz import math
, a następnie wywołasz dir(math)
, otrzymasz listę wszystkich elementów modułu math
, w tym liczbę pi
i funkcję sqrt
.
Dlaczego obiekty?
Dlaczego mamy metody takie jak S.index(T)
, a nie tylko proste wywołanie funkcji, takie jak index(S, T)
? To znaczy, dlaczego w ogóle mamy obiekt S
i metodę str.index()
?
Główne zalety obiektów stają się wyraźniejsze gdy rozpoczynasz programowanie przy użyciu bardziej złożonych i różnorodnych typów danych. Każdy typ obiektu (tzn. str
class) reprezentuje zarówno podstawowe dane, które są przechowywane (na przykład sekwencja znaków i jej długość) oraz typy operacji, które można wykonać na nim (np. Konwersja na wielkie litery lub wytwarzanie Podciąg). Bardziej złożonym przykładem są obiekty plików: reprezentują nazwę otwieranego pliku, bieżącą pozycję w pliku i sposoby ich odczytu i zapisu. Możesz nawet zdefiniować własne typy danych!
To ogólne podejście nazywa się "programowaniem obiektowym" (OOP). Niektóre z jego zalet to:
- organizacja: Wszystko z modułu
math
jest dostępne poprzez wywołanie ze składniąmath.«name»
, z uniknięciem możliwości nadpisania istniejących nazw zmiennych w programie. - kapsułkowanie: Podobnie jak program może pracować z kilkoma łańcuchami lub kilkoma plikami jednocześnie, można pracować z wieloma odrębnymi kopiami (instancjami) typów danych zdefiniowanymi przez jakąkolwiek inną klasę.
- powtórne wykorzystanie: Po zdefiniowaniu typu danych (np.
str
) lub metod w bibliotece (np.math
) możesz wielokrotnie używać je lub przekazywać innym osobom do użycia. - debugowanie: Widzieliśmy wcześniej, jak pisanie funkcji eliminuje konieczność stosowania wielu kopii tego samego kodu, a to sprawia, że debugowanie jest łatwiejsze. Możemy uzyskać ten sam efekt, gdy zdefiniujemy wszystkie funkcje związane z typem danych w jednym miejscu (definicja klasy).
- relacje między klasami: Python wie, ze metoda
index
oznacza jedno dla łańcucha i coś innego dla listy.Podobnie nie tylko Python potrafi czytać i pisać pliki na Twoim komputerze, ale także odczytywać i zapisywać dane w internecie. W obydwu przypadkach (sekwencji znaków lub list oraz plików lokalnych lub zdalnych) powiązane klasy mogą być jednorodnie przetwarzane, używając pojęcia dziedziczenia.
W pozostałych części CS Circles będziemy używać tylko obiektów i metod; Możesz dowiedzieć się więcej o tworzeniu własnych klas później (zobacz stronę Zasoby).
Kolejne trzy lekcje można wykonać w dowolnej kolejności i dają wiele wyzwań łączących tematy z wcześniejszych lekcji.