14: Metody

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ład
Odwracanie listy.

Przykładem metody, która ma argument jest str.startswith:

Przykład
Niektóre metody łańcucha.

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 takie i, że list[i]==X . Zwracane jest najmniejsze i . Jeśli X nie istnieje na liście, wtedy swoduje to ValueError.
    • X in list zwróci True jeśli X jest elementem listy, w przeciwnym wypadku zwróci False. Dzięki temu można uniknąć wystąpienia błędu ValueError. (Uwaga,in jest operatorem, nie metodą.)
  • list.count(X): zwraca liczbę, ile razy X pojawisię na liście.

Przykład
Metody list.

Metody te zmieniają listę:

  • list.append(X) dodaje X na końcu listy list
  • list.insert(i, X) dodaje X na i-tej pozycji
  • list.extend(L) dodaje listę L na końcu
  • list.remove(X) usuwa pierwsze wystąpieni X z listy
  • list.pop(i) zwraca & usuwa element list[i], natomiast list.pop()zwraca & usuwa ostatni element
  • del list[i] zwraca i-ty element z list 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.

Zadanie na kodowanie : Wymiana
Używając index i inne metody list, zapisz funkcję replace(list, X, Y), która wszystkie wystąpienia X w lista zastępuje Y . Na przykład, jeśli L = [3, 1, 4, 1, 5, 9] zmieniłoby zawartość L na [3, 7, 4, 7, 5, 9]. Aby wykonać to ćwiczenie, nie wolno używać []
Uwaga: nie musisz uzywać return. Wskazówka
Wpisz polecenia takie jak print(mafonction("test-argument")) w polu poniżej.

Ł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ńcuch S jest podłańcuchem łańcucha T
  • S.index(T) znajduje pierwszy indeks S, gdzie T jest podłańcuchem
  • S.count(T) podaje liczbę wystąpień nieprzerwanych T jako podłańcucha S

Przykład
Wywołanie index i count na łańcuchach.

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:

Przykład
Przykład: replace zwraca nowy łańcuch i nie modyfikuje oryginalnej wersji.

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 zwraca True, jeśli str jest łańcuchem (lub znakiem) składającym się wyłącznie z liter
  • metoda boolowska 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ą do wielkich liter

Zadanie na kodowanie : Kod Pocztowy
Zdefiniuj funkcję postalValidate(S), która najpierw sprawdza, czy S prawidłowo reprezentuje kod pocztowy (w Kanadzie, np. kod pocztowy Toronto M5H 2N2 ):

  • najpierw, usuń wszystkie spacje;
  • otrzymane powinno mieć postać L#L#L# gdzie L są literami (małymi lub dużymi) i # są cyframi.

Jeśli S nie jest poprawnym kodem pocztowym, niech funkcja zwróci wartość logiczną False. Jeśli S jest poprawne, niech zwróci wersję tego samego kodu pocztowego w ładnym formacie L#L#L#, gdzie każde L jest dużą literą.

Wpisz polecenia takie jak print(mafonction("test-argument")) w polu poniżej.

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:

Przykład
Metodystr. Note that startswith is one of the outputs.

Patrzenie na właściwości obiektu nazywa się introspekcją. Wszystko w Pythonie może mieć metody:

Przykład
Liczby int.

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 indexoznacza 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.