Python_Notatki Z10





# def kwadrat(x):
# wynik = x*x
# return wynik
def kwadrat(x):
return x*x
def szescian(x):
wynik = x*x*x
return wynik
podniesione_do_kwadratu = kwadrat(3)
print(podniesione_do_kwadratu)
do_szescianu = szescian(3)
print(do_szescianu)
Funkcja print nic nie zwraca, niektóre inne też.


return nie zawsze musi być w funkcji.

UWAŻAJ na takie pomyłki — niepodawanie typu parametrów i typu return funkcji!!!

Trzeba podawać typ parametru, np. int, float, bool i td.

Jeżeli podać typ to vs code podpowiada od razu i podkreśla pomyłki. To też ułatwia pracę współpracownikom i sobie przyszłemu.
Dobrze podawać jaki typ funkcja zwróci:

Jeżeli funkcja nic nie zwraca — to -> None
Książka Kontaktowa, wersja jednej ze studentek:



Można zaznaczone fragmenty kodu zamienić w funkcje.
Dobrze jeżeli funkcja zajmuje się 1 rzeczą, a nie wieloma rzeczami naraz! Ale to niesztywna zasada.
REKURENCJA!!!! Można użyć samej funkcji w funkcji.


Rekurencja


moje_liczby = []
def counter(end:int, start:int = 0, step:int=1):
if start > end:
return
moje_liczby.append(start)
counter(end, start + step, step)
counter(end=10, step=1)
print(moje_liczby)
Można zaimportować sobie funkcje z pliku do innego pliku
from recursive_counter import counter — i potem można korzystać z funkcji counter.





Kod zrobi się jeszcze bardziej modularny przez tworzenie klas. Mniej pomyłek.


Specjalna funkcja _ _ init _ _ w klasie — magiczna funkcja odpowiada za przypisanie do konkretnego obiektu z klasy charakterystycznych cech.

Dalej deklarujemy metody wbudowane w klasę:

Pojawia się self — oznacza, że odwołujemy się do indywidualnych cech obiektu

Jeżeli bez self wpisać, to wszystkie koty są rude, czyli to jest dla wszystkich obiektów klasy

Zawsze nazywa się init!!!! Nie można tego zmienić tu
def init to tak zwany konstruktor, to co tworzy nam obiekt, ale nie do końca
Konstruktor to jest funkcja wywoływana, zanim obiekt jest stworzony. Tu init wywoływany już po stworzeniu obiektu, ale funkcjonalność jest zbliżona.

Dobra praktyka – przekazywać tak:

Do atrybutów nie ma nawiasów okrągłych na końcu po nazwie atrybutu.
Do funkcji (metod) koniecznie nawiasy, żeby uruchomić.
Dobudowujemy funkcjonalność do klasy!




Funkcje — global



W poprzednim drukuje się najpierw 22 potem 12, bez global


Można dodać klasę optional — opcjonalne atrybuty

DZIEDZICZENIE!!!!!!!!

Tak się zapisuje dziedziczenie. Klasa Mag dziedziczy PostacGracza

NIE robić lepiej dziedziczenia od dziedziczenia od dziedziczenia...

Rekomendacja: jeżeli coś można napisać bez dziedziczenia to lepiej tak zrobić

Nie profesja rozszerza gracza, tylko lepiej zrobić ze gracz ma profesje)

potem:
self.profesja = Mag
Nie robić wielokrotnego dziedziczenia!!!
Dla mocnych w programowaniu książka:

Na ostatnich zajęciach przypomnieć, żeby opowiedział, jak zapakować apki do pliku exec.