7
Procedury i funkcje Piotr Pawlik Wykł ad 2019 Piotr, Pawlik Wstęp do Informatyki 2019 1/1 Powtarzanie poleceń Piotr, Pawlik Wstęp do Informatyki 2019 2/1 Powtarzanie poleceń - procedury Piotr, Pawlik Wstęp do Informatyki 2019 3/1 Powtarzanie poleceń - procedury Piotr, Pawlik Wstęp do Informatyki 2019 4/1

Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Procedury i funkcje

Piotr Pawlik

Wykład 2019

Piotr, Pawlik Wstęp do Informatyki 2019 1 / 1

Powtarzanie poleceń

Piotr, Pawlik Wstęp do Informatyki 2019 2 / 1

Powtarzanie poleceń - procedury

Piotr, Pawlik Wstęp do Informatyki 2019 3 / 1

Powtarzanie poleceń - procedury

Piotr, Pawlik Wstęp do Informatyki 2019 4 / 1

Page 2: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Funkcje z parametrami

Piotr, Pawlik Wstęp do Informatyki 2019 5 / 1

Rekurencja (Demotywatory.pl)

Piotr, Pawlik Wstęp do Informatyki 2019 6 / 1

Rekurencja

Piotr, Pawlik Wstęp do Informatyki 2019 7 / 1

Procedury i funkcje

Wprowadzenie standardowych „struktursterujących”:

sekwencja

selekcja (wybór, if-else, switch)

pętla

podprogram (jedno wejście, JEDNOwyjście)

Piotr, Pawlik Wstęp do Informatyki 2019 8 / 1

Page 3: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Definiowanie funkcji

Składnia definicji funkcji:def n a zwa f u n k c j i ( l i s t a p a r am e t r ów) :

i n s t r u k c j e d o w y k o n a n i a

Przykładdef suma ( a , b ) :

return a+b

Piotr, Pawlik Wstęp do Informatyki 2019 9 / 1

Wywoływanie funkcji

Przykładyl i c z b a c = suma (1 , 5)l i c z b a r z = suma (1 , 5 . 0 )n ap i s = suma ( ’ Ala ’ , suma ( ’ma ’ , ’ kota ) )

Piotr, Pawlik Wstęp do Informatyki 2019 10 / 1

Parametry domyślne

Przykładdef suma ( a , b , c=0.0) :

return a+b+c

l i c z b a c = suma (1 , 5 , 0)l i c z b a r z = suma (1 , 5)n ap i s = suma ( ’ Ala ’ , ’ma ’ , ’ kota ’ )

Piotr, Pawlik Wstęp do Informatyki 2019 11 / 1

Argumenty z nazwą parametru

Przykłady

nap i s = suma ( ’ Ala ’ , c=’ kota ’ , b=’ma ’ )n ap i s = suma ( c=’ kota ’ , b=’ma ’ , a=’ Ala ’ )

Argumenty znajdujące się po argumentach znazwą parametru (nawet na właściwych sobiepozycjach), także muszą mieć podaną nazwęparametru.

Piotr, Pawlik Wstęp do Informatyki 2019 12 / 1

Page 4: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Funkcje z nieznaną (zmienną)liczbą argumentów

Przykładdef suma (∗ arg ) :sum=Nonefo r x in arg :

i f sum == None :sum = x

e l se :sum += x

return sum

Piotr, Pawlik Wstęp do Informatyki 2019 13 / 1

Funkcje zwracające kilka wartości

Przykładdef s uma i l o c z yn ( a , b ) :

return a+b , a∗b

Zwracane wartości są umieszczane w krotce.

Piotr, Pawlik Wstęp do Informatyki 2019 14 / 1

Przykład funkcji z parametremdomyślnym

Przykładdef d o l a c z e l ( e lem , l i s t a = [ ] ) :

l i s t a . append ( elem )return l i s t a

Argument [ ]print( dolacz_el(1, [ ]))print( dolacz_el(2, [ ]))print( dolacz_el(3, [ ]))

Parametr domyślnyprint( dolacz_el (1))print( dolacz_el (2))print( dolacz_el (3))

Piotr, Pawlik Wstęp do Informatyki 2019 15 / 1

Przykład funkcji z parametremdomyślnym

Wynik dlaargumentu [ ][1][2][3]

Wynik dlaparametrudomyślnego[1][1, 2][1, 2, 3]

Piotr, Pawlik Wstęp do Informatyki 2019 16 / 1

Page 5: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Przykład funkcji z parametremdomyślnym

Poprzednie rozwiązaniedef dolacz_el ( elem , lista = [ ] ) :

lista.append ( elem )return lista

Poprawne rozwiązaniedef dolacz_el ( elem , lista = None) :

if lista == None :return [ elem ]

lista.append ( elem )return lista

Piotr, Pawlik Wstęp do Informatyki 2019 17 / 1

Uwagi dotyczące funkcji wPythonie

Funkcja jest funktorem – czyli obiektemzwierającym operator ( )Funkcja zawsze coś zwraca (referencję dowyniku lub przynajmniej None)Definicja funkcji jest instrukcją (tworzeniaobiektu)Parametr domyślny jest wyliczany raz przydefinicji!

Piotr, Pawlik Wstęp do Informatyki 2019 18 / 1

Funkcja parametrem innej funkcji

Definicjedef f i n t ( par ) :return par

def f s t r ( par ) :return s t r ( par )

def f w r z ( f ) :return f ( 1 )+f (2 )

Wywołaniaprint( f_w_rz(f_int))>>> 3

print( f_w_rz(f_str))>>> 12

Piotr, Pawlik Wstęp do Informatyki 2019 19 / 1

Funkcja zwracana przez innąfunkcję

Definicjadef f_w_rz(ktora):

def f_x2(par):return par*2

def f_x3(par):return par*3

if ktora=="podwój":return f_x2

elif ktora=="potrój":return f_x3

Wywołaniaprint( f_w_rz("podwój")(4))>>> 8print( f_w_rz("potrój")(4))>>> 12print( f_w_rz("potr")(4))>>> ...TypeError: ’NoneType ’object is not callable

Piotr, Pawlik Wstęp do Informatyki 2019 20 / 1

Page 6: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Funkcja ze zmienną liczbąargumentów

Przykład

def suma(∗ arg ) :sum=Nonefor x in arg :i f sum==None :sum=x

else :sum+=x

return sumPiotr, Pawlik Wstęp do Informatyki 2019 21 / 1

Funkcja ze zmienną liczbąargumentów

Przykład z rekurencją

def suma(∗ arg ) :i f len ( a rg ) <1 :return None

e l i f len ( a rg ) == 1 :return arg [ 0 ]

else :return arg [0 ]+ suma(∗ arg [ 1 : ] )

Piotr, Pawlik Wstęp do Informatyki 2019 22 / 1

Generatory

Drugi, po funkcjach, typ podprogramu wPythonie. Różnica w tworzeniu polega na użyciusłowa yield zamiast return. Generator tworzyobiekt iteratorowy – czyli obiekt reprezentującystrumień danych udostępnianych ’na żądanie’(np w pętli for iterator może zastąpić sekwencję)yield nie kończy podprogramu, lecz go zawiesza.Żądanie kolejnej danej powoduje wznowienie wmiejscu ostatniego zawieszenia.

Piotr, Pawlik Wstęp do Informatyki 2019 23 / 1

Przykład generatora

Lista kwadratówliczbdef squa r e ( ) :i=1while True :y i e l d i ∗∗2i+=1

Wywołania# nieskończona sekwencjafor x in square ():

print(x, end=’�’)

# sekwencja 10-ciu kwadratówit = square ()for i in range (10):

print( next(it), end=’�’)

Piotr, Pawlik Wstęp do Informatyki 2019 24 / 1

Page 7: Powtarzanie poleceń Procedury i funkcjehome.agh.edu.pl/~piotrus/Python/Funkcje.pdf · Rekurencja (Demotywatory.pl) Piotr, Pawlik Wstęp do Informatyki 2019 6/1 Rekurencja Piotr,

Kolejny przykład

”Powtarzacz”def r e p e a t e r (∗ arg ) :while True :fo r e l in arg :y i e l d e l

Wywołaniait = repeater(’Ala’, ’ma’,’kota’)

# 5 wywołań:for i in range (5):print( next(it), end=’�’)

>>> Ala ma kota Ala ma

# Kolejne 5 wywołań:for i in range (5):print( next(it), end=’�’)

>>> kota Ala ma kota Ala

Piotr, Pawlik Wstęp do Informatyki 2019 25 / 1

Przekazanie danych dowspółprogramu

”Powtarzacz”

def print_name(prefix):print("Szukam:", \prefix)

while True:name = (yield)if prefix inname:print(name)

Wywołaniacorou = print_name("Drogi")

corou.__next__ ()# to samo co# next(corou)

corou.send("Piotrze")corou.send("Drogi�Piotrze")

>>> Szukam: Drogi>>> Drogi Piotrze

Piotr, Pawlik Wstęp do Informatyki 2019 26 / 1