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