G. Jagiella

Podstawowy warsztat AI 2025/26

ostatnia modyfikacja: 24.10.2025

Wykład 4 - metody, moduły, wstęp do rysowania wykresów¶

Przypomnienie: list (obiekt typu lst) - ciąg obiektów, podobny do krotki, ale zmienialny.

Przybliżony odpowiednik w C++: std::vector lub wręcz std::vector<std::shared_ptr<void>>.

In [1]:
lst = [1, 2, 3]
print(lst)
[1, 2, 3]
In [2]:
lst[0] = 1000
print(lst)
[1000, 2, 3]

Metody¶

Metoda (intuicyjnie) - funkcja przywiązana do obiektu.

In [3]:
lst = [1, 2, 3]
lst.append('X') # wywołanie metody append obiektu o nazwie lst
print(lst)
[1, 2, 3, 'X']

Ogólna składnia: obj.method(...) gdzie obj to obiekt, method to nazwa jego metody.

Przykłady metod list¶

pop():

In [4]:
lst = [1, 2, 3]
print(lst)
[1, 2, 3]
In [5]:
lst.pop() # bez parametru usuwa i zwraca element z końca listy
Out[5]:
3
In [6]:
print(lst)
[1, 2]

pop(i) (i - indeks):

In [7]:
lst = [1, 2, 3]
print(lst)
[1, 2, 3]
In [8]:
lst.pop(1) # jak pop(), ale usuwa element spod podanego indeksu
Out[8]:
2
In [9]:
print(lst)
[1, 3]

remove(x):

In [10]:
lst = list("abcdeabcde")
print(lst)
lst.remove("b") # usuwa pierwsze wystąpienie elementu
print(lst)
['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e']
['a', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e']

index(x):

In [11]:
lst = [1, 2.0, [], (1,2,3), "aaa"]
lst.index(2.0) # zwraca indeks pod którym pojawia się element
Out[11]:
1

Więcej metod list: https://docs.python.org/3/tutorial/datastructures.html#more-on-lists

Przykłady metod napisów¶

Napisy nie są zmienialne, zatem żadna metoda napisu nie będzie go modyfikować (ale może zwrócić nowy napis).

In [12]:
s = "Jestem przykładowym napisem."
In [13]:
print(s.upper())
JESTEM PRZYKŁADOWYM NAPISEM.
In [14]:
print(s.lower()) # podobnie: s.casefold()
jestem przykładowym napisem.
In [15]:
print(s.count("em")) # liczba wystąpień podnapisu
2
In [16]:
print("Napis".isupper())
print("NAPIS".isupper())
False
True
In [17]:
s = "Jestem przykładowym napisem."
s.split() # zwraca listę, można wybrać separator
Out[17]:
['Jestem', 'przykładowym', 'napisem.']
In [18]:
print(s.startswith("Jestem "))
print(s.endswith("m."))
True
True
In [19]:
print(s.replace("przykładowym", "niezwykle ważnym"))
print(s.replace("e", "E"))
Jestem niezwykle ważnym napisem.
JEstEm przykładowym napisEm.

Dużo więcej metod: https://docs.python.org/3/library/stdtypes.html#string-methods

Metody które posiada dany obiekt zazwyczaj zależą od jego typu.

Metoda danego obiektu zazwyczaj wykonuje operację związaną z tym obiektem (np. modyfikuje go lub zwraca informację o nim).

Moduły¶

Moduł (intuicyjnie) - paczka z kodem Pythona (zawierająca funkcje, typy, inne obiekty).
Żeby ich użyć, trzeba je zaimportować.

Przykład: math - wbudowany moduł dostarczający funkcji (i stałych) matematycznych.

Pierwszy sposób importowania: indywidualne nazwy.

In [20]:
from math import pi, sin, cos, exp
In [21]:
print(pi)
print(sin(pi / 2))
print(cos(1))
print(exp(1))
3.141592653589793
1.0
0.5403023058681398
2.718281828459045

Drugi sposób: importowanie całego modułu.

In [22]:
import math

Dostęp do obiektów w module ma składnię podobną do wywoływania metod obiektów:

In [23]:
print(math.pi)
print(math.sin(math.pi))
print(math.cos(math.pi))
3.141592653589793
1.2246467991473532e-16
-1.0
Uwaga. W istocie wyrażenie obj.attr oznacza dostęp do atrybutu attr obiektu obj. Atrybut to nazwa stowarzyszona z obiektem i może nazywać dowolny obiekt. W szczególności taki obiekt może być liczbą (math.pi), funkcją (math.sin) lub metodą (lst.append, gdzie lst ot lista).
Powyżej, math to też obiekt (typu module).

Moduł math: nie tylko analiza matematyczna. Kilka przykładów:

In [24]:
print(math.factorial(10)) # silnia
print(math.comb(6, 4)) # symbol Newtona: 6 po 4
print(math.gcd(15, -21)) # największy wspólny dzielnik
3628800
15
3

Odległość punktów w $\mathbb{R}^n$:

In [25]:
print(math.dist((0, 0), (3, 4)))
print(math.dist((1, 2, 3), (2, 3, 4)) )
5.0
1.7320508075688772

Dokumentacja: https://docs.python.org/3/library/math.html#

Python ma dużo wbudowanych modułów, np:

  • math
  • time, datetime - reprezentacja i przetwarzanie czasu i dat.
  • os, sys - obsługa systemu plików, poleceń systemowych.
  • random - losowanie liczb, permutacji etc.
  • csv, json, xml zipfile, tarfile - praca z konkretnymi formatami plików.
  • sqlite3 - obsługa baz danych SQL.
  • tkinter - tworzenie okienkowych interfejsó graficznych.
  • ponad 200 innych

Siła Pythona tkwi między innymi w bardzo bogatym ekosystemie dodatkowych modułów, w szczególności pakietów modułów przetwarzania i wizualizacji danych (matplotlib, plotly), oraz narzędzi ML (torch, keras, sklearn, ...).

Bardzo wiele modułów można ściągnąć za pomocą managera pip, dołączonego do typowej dystrybucji Pythona.

Instalacja modułu o (fikcyjnej) nazwie xyz z linii poleceń (cmd.exe lub terminal):

pip install xyz

Linia poleceń jest dostępna w Jupter Notebooku przez !:

In [ ]:
!dir

A zatem można instalować moduły z samego Notebooka:

In [ ]:
!pip install xyz

Wstęp do rysowania¶

Proste rysowanie z użyciem matplotlib. Na początek instalacja:

In [ ]:
!pip install matplotlib

Teraz import (trzeci sposób):

In [26]:
import matplotlib.pyplot as plt # jak `import matplotlib.pyplot`, ale importuje pod nazwą plt

Cel - narysować linię łamaną zadaną punktami: tu powinien być obrazek

In [27]:
# Jupyterowa "magia", nie zawsze potrzebna
%matplotlib inline
In [28]:
plt.plot([1, 3, 4, 5.5, 2], [2, 3.5, 3, 6, 7]) # parametry: ciąg współrzędnych x, ciąg współrzędnych y
plt.show() # w notatniku można pominąć
In [29]:
xs = [1, 3, 4, 5.5, 2]
ys = [2, 3.5, 3, 6, 7]

Bardzo dużo opcji rysowania (i upiększania):

In [30]:
plt.plot(xs, ys, color="red") # jeden ze sposobów przekazywania "nazwanych" parametrów funkcji
plt.show()
In [31]:
plt.plot(xs, ys, color="red")
plt.plot([1, 2, 3], [4, 1, 6], color="#40C0A0") # kolor html
plt.show()

Dużo innych opcji:

In [32]:
from matplotlib.pyplot import plot, show, legend, xlabel, ylabel, title, grid

temp_2006 = [-5.9, -2.0, 0.6, 9.7, 13.7, 18.1, 22.6, 17.3, 16.4, 11.4, 7.0, 4.2]
temp_2012 = [1.0, -4.0, 6.5, 9.1, 14.5, 17.3, 19.9, 19.5, 15.1, 8.8, 6.0, -0.9]
temp_2018 = [3.4, -1.4, 1.9, 13.9, 17.5, 19.6, 20.6, 22.0, 16.9, 11.6, 5.8, 3.2]

months = range(1, 13)

plot(months, temp_2006, marker='x', linestyle='dashdot')
plot(months, temp_2012, marker='x', linestyle='dotted')
plot(months, temp_2018, marker='x', linestyle='None')

title("Średnia dzienna temperatura we Wrocławiu")
xlabel("Miesiąc")
ylabel("Temperatura [C]")
legend([2006, 2012, 2018])

grid()
show()

Listy składane¶

In [33]:
lst = [i ** 2 for i in range(10)]
print(lst)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Ogólniej:
[expression for name in sequence] gdzie expression to wyrażenie, w którym może pojawiać się nazwa name.

Przydatne w rysowaniu wykresów funkcji:

In [34]:
xs = [2 * math.pi * i / 100 for i in range(101)]
ys = [math.sin(x) for x in xs]
plt.plot(xs, ys)
plt.show()

Uwaga. Na następnym wykładzie pojawi się jeszcze lepszy sposób reprezentacji ciągów liczb (z użyciem modułu numpy).