1 2 | def nazwa(): kod |
by wywołać tą funkcję
nazwa()
funkcja musi być zdefiniowana przed wywołaniem!
przykład:
1 2 3 4 5 6 7 8 9 | def komunikat(): print('Proszę, podaj następną daną') komunikat() a = int(input()) komunikat() b = int(input()) komunikat() c = int(input()) |
Funkcja z parametrami:
1 2 3 4 5 6 7 | def powitanie(imie,nazwisko): print('Dzień dobry, nazywam się ' + \ nazwisko + '... ' + imie + ' ' + \ nazwisko + '...') powitanie('Janusz', 'Pospolity') powitanie('Zenon', 'Kotwica') |
Zmienna parametru z funkcji nie będzie dostępna poza funkcją, jesli jest taka sama jak inna zmienna w programie na czas wykonywania funkcji "przysłania" ją.
Funkcje można przekazywać podając określoną zmienna, wtedy nie trzeba zachowywać kolejności.
1 2 3 4 5 6 7 | def powitanie(imie,nazwisko="Nowak"): print('Dzień dobry, nazywam się ' + \ nazwisko + '... ' + imie + ' ' + \ nazwisko + '...') powitanie(nazwisko='Bond', imie='James') powitanie(imie='Skarabeusz',nazwisko='Młotek') |
Powyższe przykłady funkcji mają efekt (napis na ekranie). Funkcja może jednak zwracać wynik:
return wyrażenie
przykład:
1 2 3 4 5 | def prosta_funkcja(): return 13 x = prosta_funkcja() print('Funkcja przekazała swój wynik:', x) |
return może zwracać także True/False
1 2 3 4 5 6 | def czyparzysta(n): if(n % 2 == 0): return True print(czyparzysta(2)) print(czyparzysta(1)) |
czego wynikiem będzie
True
None
Czemu None? bo return w przypadku niespełnienia warunku nie dostał żadnego parametru
Jako parametr może być przekazana lista:
1 2 3 4 5 6 7 | def sumalisty(l): suma = 0 for el in l: suma += el return suma print(sumalisty([5,4,3])) |
Wynik
12
Polecenie global sprawia, że zmienna staje się globalna i nie jest przysłaniana.
1 2 3 4 5 6 7 8 | def funkcja(): global zmienna print("Czy ja znam tę zmienną? ", zmienna) zmienna=2 zmienna = 1 funkcja() print(zmienna) |
Wynik:
Czy ja znam tę zmienną? 1
2
czyli zmienna ustawiona poza funkcją (1) dzięki global dostała się do funkcji, a także ustawiona w funkcji na 2, wydostała się poza funkcję
Kolejny przykład:
1 2 3 4 5 6 7 8 | def funkcja(n): print('Dostałam',n) n += 1 print('Policzyłam sobie',n) zmienna = 3 funkcja(zmienna) print(zmienna) |
Dostałem 3
Policzyłem sobie 4
3
pokazuje, że bez polecenia global, zmianna zwiększona w funkcji do 4 poza funkcją pozostaje 3
Powyższe nie dotyczy list przekazywanych jako parametr funkcji.
Nawet bez polecenia global:
1 2 3 4 5 6 7 | def funkcja(l): print(l) del l[0] lista = [1,2,3] funkcja(lista) print(lista) |
[1,2,3]
[2,3]
Czyli usunięcie elementu listy w funkcji wypływa na listę poza funkcją. Przysłonięta zmienna odwołuje się do tego samego obszaru pamięci w którym mamy listę, co zmienna nieprzysłonięta, dlatego zmiana dokonuje się.