Wykład 4

Transkrypt

Wykład 4
Podstawy programowania
Python – wykład 4
Funkcje
●
●
ponowne użycie kodu: funkcje pozwalają na
grupowanie i parametryzację części kodu, która ma
być użyta dowolnie często w dowolnym czasie;
dekompozycja proceduralna: funkcje zapewniają
mechanizm podziału systemów na fragmenty,
realizujące dobrze zdefiniowane zadania; łatwiej jest
wykonywać małe zadania oddzielnie niż cały program
naraz;
Funkcje
●
●
●
●
●
Instrukcja def: jest instrukcją wykonywalną; po uruchomieniu
generuje nowy obiekt i przypisuje go do nazwy funkcji.
Instrukcja return: przekazuje obiekt wynikowy do wywołujacego;
po wywołaniu funkcji wywołujacy zatrzymuje się, aż do momentu,
gdy funkcja zakończy działanie i zwróci sterowanie; funkcje
obliczjące wartość przekazują ją do wywołującego za pomocą
instrukcji return.
Instrukcja global: deklaruje zmienne, które mają zasięg (są
przypisane) na poziomie modułu.
Argumenty: są przekazywane przez przypisanie (odwołanie do
obiektu).
UWAGA: Ponieważ w Pythonie nie ma przymusu okreslania typu w
funkcjach, to jedna funkcja może być stosowana do obiektów różnego
typu.
Postać ogólna
def <nazwa>(arg1, arg2, …, argN): #nagłówek
<instrukcje>
return <wartość>
#ciało funkcji
UWAGI
●
●
●
●
●
Instrukcja def tworzy obiekt funkcji i przypisuje mu nazwę.
Wiersz nagłówkowy zawiera nazwę funkcji (do której jest
przypisany obiekt funkcji) oraz listę argumentów (parametrów),
które są przypisane do obiektów przekazywanych w nawiasach w
miejscu wywołania.
W ciele funkcji są instrukcje, czyli kod uruchamiany przy każdym
wywoływaniu funkcji.
W ciele funkcji może, ale nie musi występować instrukcja return.
Kończy ona wywolanie funkcji i odsyła wynik do wywołujacego.
Zawiera ona wyrażenie obiektowe, które podaje wynik funkcji.
Przy braku instrukcji return, funkcja kończy się po wyjściu
sterowania poza ciało. Formalnie funkcja bez return zwraca
automatycznie obiekt None.
Przykład 1
def razy(x,y):
return x * y
print(razy(2,4))
print(razy('Ala',4))
Przykład 2
def przeciecie(arg1, arg2):
wynik = []
for i in arg1:
if i in arg2:
wynik.append(i)
return wynik
s1 = 'mielonka'
s2 = 'wiele'
print(przeciecie(s1,s2))
print(przeciecie([1,2,3,4],(1,2,4,5)))
Zakresy działania w funkcjach
●
●
●
●
●
Gdy w programie użyjemy nazwy, Python tworzy, modyfikuje
lub wyszukuje ją w miejscu zwanym przestrzenią nazw.
Nazwy w języku Python pojawiają się wówczas, gdy zostanie
im przypisana wartość.
Ponieważ nazwy nie są deklarowane z góry, Python używa
przypisania nazwy do powiązania jej z odpowidnią
przestrzenią nazw.
Funkcje dodają dodatkową warstwę do obszaru nazw w
programie.
Domyślnie nazwy przypisane wewnątrz funkcji są związane
tylko z przestrzenią nazw tej funkcji, i z niczym innym.
Zakresy działania w funkcjach
●
●
●
Funkcje działają w zagnieżdżonym obszarze nazw, czasem
zwanym zakresem. Dzięki temu nazwy, których one używają,
nie powodują konfliktu z nazwami zewnętrznymi
(umieszczonymi w innej funkcji lub w module).
Zwykle mówi się, że funkcja definiuje zakres lokalny, a moduły
definiują zakres globalny.
Zakresy te zależne są od siebie w następujący sposób:
–
moduł otaczający jest zakresem globalnym;
–
każde wywołanie funkcji ma nowy zakres lokalny;
–
nazwy przypisane są lokalne, chyba że są zadeklarowane
jako globalne;
–
wszystkie pozostałe nazwy są nazwami globalnymi lub
wbudowanymi.
Przykład 3
X = 99
def A(Y):
wynik = X + Y
return wynik
print(A(1))
Przykład 4
X, Y = 99, 1
def A():
global wynik
wynik = X + Y
A()
print(wynik)
Przekazywanie argumentów
●
●
●
Argumenty są przekazywane za pomocą przypisania
obiektów do nazw lokalnych.
Przypisanie do nazw argumentów wewnątrz funkcji nie
wpływa na wywołanie
Modyfikacja obiektu zmiennego (listy, słowniki) w funkcji
może mieć wpływ na wywołanie.
Przykład 5
def changer(x,y):
x = 2
y[0] = 'golonka'
X = 1
L = [1,2]
print(X)
print(L)
changer(X,L)
print(X)
print(L)
Przykład 6
def zmiana(x,y):
x = 2
y = [3,4]
return x, y
X = 1
Y = [1,2]
print(X, Y)
X,Y = zmiana(X,Y)
print(X, Y)
Specjalne tryby dopasowania argumentów
●
Pozycyjny: dopasowanie od lewej do prawej.
●
Słowa kluczowe: dopasowanie za pomocą nazwy argumentu.
●
●
varargs: wychwycenie niedopasowanych argumentów
pozycyjnych lub słów kluczowych. Funkcje mogą używać
specjalnych argumentów, gromadzących dowolną liczbę
argumentów dodatkowych.
Domyślne: określanie wartości dla argumentów, które nie zostały
przekazane.
Specjalne tryby dopasowania argumentów
Składnia
Położenie
Interpretacja
func(value)
wywołanie
Argument normalny: dopasowanie na
podstawie pozycji
func(naze=value)
wywołanie
Słowo kluczowe: dopasowanie na podstawie
nazwy
def func(name)
funkcja
Argument normalny: dopasowanie do
wszystkiego na podstawie pozycji lub nazwy
def func(name = value)
funkcja
Domyślna wartość argumentu, jeśli nie był on
przekazany w wywołaniu
def func(*name)
funkcja
Dopasowanie do pozostałych argumentów
pozycyjnych (w krotce)
def func(**name)
funkcja
Dopasowanie do pozostałych słów
kluczowych (w słowniku)
Przykład 7
def wypisz(A, B, C = 0, D = 0):
print(A, B, C, D)
wypisz(1,2)
wypisz(1, D = 9, B = 3)
wypisz(A = 10, B = 11)
wypisz(C = 9, B = 8, A = 7)
wypisz(1,2,3,4)
Przykład 8
def A(*args):
wynik = []
for x in args[0]:
for i in args[1:]:
if x not in i: break
else:
wynik.append(x)
return wynik
a, b, c = 'mielonka', 'wiele', 'szlam'
print(A(a,b,c))
Przykład 9
def B(*args):
wynik = []
for x in args:
for i in x:
if i not in wynik:
wynik.append(i)
return wynik
a, b, c = 'mielonka', 'wiele', 'szlam'
print(B(a,b,c))