Podstawy programowania w Pythonie Wykład 4 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie 24 października 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 1 / 15
Bardzo często zachodzi potrzeba wielokrotnego wykonania tej samej samej sekwencji instrukcji, ale z drobna różnica, na przykład z inna wartościa poczatkow a. Funkcja to nazwana sekwencja instrukcji realizujaca specyficzne zadanie. Celem definiowania funkcji jest podzielenie programu na fragmenty odzwierciedlajace sposób myślenia o danym problemie. stosuje się, aby uprościć program i zwiększyć jego czytelność. ukrywaja złożone obliczenia za pomoca jednej instrukcji wywołania funkcji. Utworzenie funkcji pozwala zmniejszyć program poprzez eliminację powtarzajacego się kodu. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 2 / 15
Składnia definicji funkcji jest następujaca: def nazwa(argumenty): blokinstrukcji Pierwsza linia funkcji zaczyna się od słowa kluczowego def a kończy dwukropkiem. Linia ta nazywa się nagłówkiem funkcji. Nazwa funkcji musi być identyfikatorem (nie może być słowem kluczowym). Lista argumentów może być pusta lub może składać się z dowolnej ilości argumentów oddzielonych przecinkami. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 3 / 15
W trakcie wykonywania polecenia def następuje utworzenie obiektu funkcji. Następnie do zmiennej, której nazwa jest nazwa funkcji, przypisywane jest odniesienie do obiektu funkcji. Z faktu, że funkcje sa obiektami wynika iż moga być one przechowywane w kolekcjach zbiorów danych i przekazywane jako argumenty do innych funkcji, Przykład Program squares.py dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 4 / 15
import turtle def draw_multicolor_square(t, length): for c in ["red", "purple", "hotpink", "blue"]: t.color(c); t.forward(length); t.left(90) def main(): wn = turtle.screen(); wn.bgcolor("lightgreen") tess = turtle.turtle(); tess.pensize(3) for length in range(20, 200, 10): draw_multicolor_square(tess, length) tess.forward(10); tess.right(18) wn.mainloop() main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 5 / 15
Bezpośrednio po nagłówku funkcji może, ale nie musi, wystapić komentarz dokumentacyjny. Komentarze dokumentacyjne ujmuje się zazwyczaj w potrójne cudzysłowy, dzięki czemu moga one zajmować dowolnie wiele linii. Składnia definicji funkcji uwzględniajaca komentarz dokumentacyjny jest następujaca: def nazwa(argumenty): """Opcjonalny komentarz dokumentacyjny mogący zajmować wiele linii""" blokinstrukcji dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 6 / 15
funkcje import turtle def draw_square(t, length): """Niech żółw t narysuje kwadrat o boku length""" for j in range(4): t.forward(length); t.left(90) def main(): win = turtle.screen() win.bgcolor("lightgreen"); win.title("kwadrat") bob = turtle.turtle(); bob.color("blue"); bob.pensize(3); draw_square(bob, 150) win.mainloop() main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 7 / 15
moga wywoływać inne funkcje: import turtle def draw_rectangle(t, width, height): """Niech żółw t narysuje prostokąt o podanej szerokości i wysokości""" for j in range(2): t.forward(width); t.left(90) t.forward(height); t.left(90) def draw_square(t, length): """Niech żółw t narysuje kwadrat o boku length""" draw_rectangle(t, length, length) dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 8 / 15
W celu zapewnienia, że funkcja jest zdefiniowana przed jej pierwszym użyciem, należy rozumieć, w jakiej kolejności wykonywane sa instrukcje. Kolejność wykonywania instrukcji jest nazywana przepływem sterowania. Wykonanie programu zaczyna się zawsze od jego pierwszej instrukcji. Instrukcje sa wykonywane pojedynczo, w kolejności od góry do dołu. Definicje funkcji nie zmieniaja przepływu sterowania programu. Instrukcje wewnatrz funkcji nie sa wykonywane, aż do momentu gdy funkcja zostanie wywołana. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 9 / 15
funkcje Niepoprawna kolejność instrukcji import turtle def main(): win = turtle.screen() bob = turtle.turtle() draw_hexagon(bob, 150) win.mainloop() main() def draw_hexagon(t, length): for j in range(6): t.left(60) t.forward(length) dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 10 / 15
funkcje Poprawna kolejność instrukcji import turtle def draw_hexagon(t, length): for j in range(6): t.left(60) t.forward(length) def main(): win = turtle.screen() bob = turtle.turtle() draw_hexagon(bob, 150) win.mainloop() main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 11 / 15
funkcje Poprawna i polecana kolejność instrukcji import turtle def main(): win = turtle.screen() bob = turtle.turtle() draw_hexagon(bob, 150) win.mainloop() def draw_hexagon(t, length): for j in range(6): t.left(60) t.forward(length) main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 12 / 15
Każda funkcja Pythona posiada wartość zwrotna. Domyślnie wartościa zwrotna jest None, chyba że z wnętrza funkcji zostanie zwrócona inna wartość za pomoca instrukcji o następujacej składni: return wyrażenie Wykonanie powyższej instrukcji powoduje obliczenia wartości wyrażenia wyrażenie, po czym wartość ta staje się wartościa zwrotna danej funkcji. Wartość zwrotna może być pojedyncza wartościa badź krotka wartości. Wartość zwrotna może zostać zignorowana przez wywołujacego funkcję; będzie ona wówczas odrzucona. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 13 / 15
funkcje import math, turtle def main(): win = turtle.screen(); win.bgcolor("khaki2"); bob = turtle.turtle(); bob.color("blue"); bob.pensize(3); bob.speed(0) draw_circle(bob, 300, 720) win.mainloop() def draw_circle(t, r, n): """Rysuje wielokąt foremny o n bokach""" t.penup(); t.goto(0, -r); t.pendown() length = (2 * math.pi * r) / n for j in range(n): t.left(360 / n); t.forward(length) main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 14 / 15
funkcje Aby zwiększyć czytelność programu z poprzedniego slajdu przeprowadzimy refaktoryzację jego kodu źródłowego. Refaktoryzacja to proces wprowadzania zmian w programie, w wyniku którego zasadniczo nie zmienia się jego funkcjonalność. A zatem, celem refaktoryzacji nie jest wytwarzanie nowej funkcjonalności, ale osiagnięcie odpowiedniej, wysokiej jakości organizacji programu. Przykłady circle.py twocircles.py wheeels.py dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 15 / 15