Podstawy programowania w Pythonie - Wykład 4
Transkrypt
Podstawy programowania w Pythonie - Wykład 4
Podstawy programowania w Pythonie Wykład 4 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Cz˛estochowie 24 października 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 1 / 15 Podstawy jezyka ˛ Python Funkcje Bardzo cz˛esto 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. Funkcje stosuje sie, ˛ aby uprościć program i zwiekszyć ˛ jego czytelność. Funkcje ukrywaja˛ złożone obliczenia za pomoca˛ jednej instrukcji – wywołania funkcji. Utworzenie funkcji pozwala zmniejszyć program poprzez eliminacje˛ powtarzajacego ˛ sie˛ kodu. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 2 / 15 Podstawy jezyka ˛ Python Funkcje Składnia definicji funkcji jest nastepuj ˛ aca: ˛ def nazwa(argumenty): blokInstrukcji Pierwsza linia funkcji zaczyna sie˛ od słowa kluczowego def a kończy dwukropkiem. Linia ta nazywa sie˛ 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ć sie˛ z dowolnej ilości argumentów oddzielonych przecinkami. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 3 / 15 Podstawy jezyka ˛ Python Funkcje W trakcie wykonywania polecenia def nastepuje ˛ utworzenie obiektu funkcji. Nastepnie ˛ 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 Podstawy jezyka ˛ Python Funkcje 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 Podstawy jezyka ˛ Python Funkcje Bezpośrednio po nagłówku funkcji może, ale nie musi, wystapić ˛ komentarz dokumentacyjny. Komentarze dokumentacyjne ujmuje sie˛ zazwyczaj w potrójne cudzysłowy, dzieki ˛ czemu moga˛ one zajmować dowolnie wiele linii. Składnia definicji funkcji uwzgledniaj ˛ aca ˛ komentarz dokumentacyjny jest nastepuj ˛ aca: ˛ def nazwa(argumenty): """Opcjonalny komentarz dokumentacyjny mogacy ˛ zajmować wiele linii""" blokInstrukcji dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 6 / 15 Podstawy jezyka ˛ Python – 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 Podstawy jezyka ˛ Python Funkcje Funkcje moga˛ wywoływać inne funkcje: import turtle def draw_rectangle(t, width, height): """Niech żółw t narysuje prostokat ˛ 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 Podstawy jezyka ˛ Python Funkcje 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 sie˛ 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 Podstawy jezyka ˛ Python – 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 Podstawy jezyka ˛ Python – 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 Podstawy jezyka ˛ Python – 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 Podstawy jezyka ˛ Python Funkcje Każda funkcja Pythona posiada wartość zwrotna. ˛ Domyślnie wartościa˛ zwrotna˛ jest None, chyba że z wnetrza ˛ funkcji zostanie zwrócona inna wartość za pomoca˛ instrukcji o nastepuj ˛ acej ˛ składni: return wyrażenie Wykonanie powyższej instrukcji powoduje obliczenia wartości wyrażenia wyrażenie, po czym wartość ta staje sie˛ 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 ˛ funkcje; ˛ bedzie ˛ ona wówczas odrzucona. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 24.10.2012 13 / 15 Podstawy jezyka ˛ Python – 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 wielokat ˛ 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 Podstawy jezyka ˛ Python – funkcje Funkcje Aby zwiekszyć ˛ czytelność programu z poprzedniego slajdu przeprowadzimy refaktoryzacje˛ jego kodu źródłowego. Refaktoryzacja to proces wprowadzania zmian w programie, w wyniku którego zasadniczo nie zmienia sie˛ jego funkcjonalność. A zatem, celem refaktoryzacji nie jest wytwarzanie nowej funkcjonalności, ale osiagni ˛ ecie ˛ 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