Wróć do informacji o e-podręczniku Wydrukuj Zapisz jako PDF Udostępnij materiał

Funkcja w programowaniu to czarna skrzynka

Nie zawsze wiesz, co ona zawiera. Masz jednak klucz, możesz ją otworzyć i do niej zajrzeć. Możesz zawsze użyć skrzynki do pewnych zadań, które potrafi wykonać za pomocą tego, co zawiera w środku. Ale nie musisz dokładnie wiedzieć, jak to robi – wystarczy, że wiesz, jaki będzie ostateczny wynik działania skrzynki, i jak sprawić, aby to osiągnąć. Natomiast szczegóły pozostawiasz jej, czyli funkcji – owej czarnej skrzynce.

Jak jest zbudowana funkcja w Python 3?

RuNuN2yUxWN6e1
Infografika przedstawia sposób budowania funkcji w języku Python. 1. Nazwa funkcji Funkcję warto nazywać tak, aby później odzwierciedlała swoją funkcjonalność, 2. Parametry Funkcja może posiadać różne parametry. W tej chwili skup się na tym, aby tworzyć proste funkcje z maksymalnie kilkoma parametrami, 3. Docstring Krótki opis funkcji, widoczny dla innych programistów, 4. Ciało funkcji Wszystkie operacje, które są wykonywane wewnątrz funkcji, 5. Return Wartość zwracana przez funkcję - w tej chwili zapamiętaj, że może ich być wiele. Na zdjęciu widoczny kod w ramce. Kolejne linie kodu: 1 Python 3.6.7 (default, Oct 22 2018, 11:32:17) 2 [GCC 8.2.0] on linux 3 Type „help”, copyright”, „credits” or „license”()” for more information. 4 >>> def nazwa_funkcji(paramater_1, parametr_2): 5 ’ ’ ’ 6 parametr_1 - int 7 parametr_2 - int 8 zwraca sumę parametrów - int 9 ’ ’ ’ 10 wynik = parametr_1 + parametr_2 11 return wynik 12 13 >>>
Funkcja w Python 3 – definicja
def nazwa_funkcji(parametr_1, parametr_2):
    '''
    parametr_1 - int
    parametr_2 - int
    zwraca sumę parametrów - int
    '''
    wynik = parametr_1 + parametr_2
    return wynik

FunkcjęfunkcjaFunkcję w języku Python definiujesz po to, aby móc używać jej później w wielu miejscach w swoim programie. Zauważ, że w powyższym przykładzie funkcja zawiera dwa parametryparametrparametry: parametr_1 i parametr_2. Następnie w jej wnętrzu, a więc w kodzie, który jest wykonywany, oba te parametry są sumowane, a suma przypisywana jest do zmiennej wynik. Na końcu zmienna wynik jest zwracana przez słowo kluczowe return.

Inne sposoby definiowania parametrów funkcji

W Pythonie możesz przekazywać do funkcji określoną liczbę parametrów, które zdefiniujesz w funkcji. Takie parametry nazywa się parametrami wymaganymi.

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> def nazwa_funkcji(parametr_1, parametr_2):
    '''
    parametr_1 - int
    parametr_2 - int
    zwraca sumę parametrów - int
    '''
    wynik = parametr_1 + parametr_2
    return wynik

>>> nazwa_funkcji(12, 45)
57

Podczas wywoływania funkcji trzeba podać wszystkie parametry, inaczej wykonanie funkcji zakończy się błędem.

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> def nazwa_funkcji(parametr_1, parametr_2):
    '''
    parametr_1 - int
    parametr_2 - int
    zwraca sumę parametrów - int
    '''
    wynik = parametr_1 + parametr_2
    return wynik

>>> nazwa_funkcji(12)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    nazwa_funkcji(12)
TypeError: nazwa_funkcji() missing 1 required positional argument: 'parametr_2'
>>>

Parametry mogą mieć wartości domyślne, które zostaną przyjęte, o ile nie podasz takiego parametru jawnie podczas wykonywania funkcji. Oto przykład zdefiniowania takiej wartości domyślnej.

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> def nazwa_funkcji(parametr_1, parametr_2 = 10):
    '''
    parametr_1 - int
    parametr_2 - int (wartość domyślna 10)
    zwraca sumę parametrów - int
    '''
    wynik = parametr_1 + parametr_2
    return wynik

>>> nazwa_funkcji(2, 4)
6
>>> nazwa_funkcji(2)
12
>>>

Parametry domyślne możesz wykorzystywać również w inny sposób. Pozwalają one wywoływać funkcję w dosyć czytelny sposób, podając nazwy parametrów przy wywołaniu – oto przykład.

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> def nazwa_funkcji(parametr_1 = 20, parametr_2 = 10):
    '''
    parametr_1 - int (wartość domyślna 20)
    parametr_2 - int (wartość domyślna 10)
    zwraca sumę parametrów - int (domyślnie 30)
    '''
    wynik = parametr_1 + parametr_2
    return wynik

>>> nazwa_funkcji()
30
>>> nazwa_funkcji(parametr_1=2, parametr_2=3)
5
>>> nazwa_funkcji(2, parametr_2=4)
6
>>> nazwa_funkcji(parametr_2=3)
23
>>>

W powyższym przykładzie możesz zaobserwować różne sposoby wywoływania funkcji, co w połączeniu z różnymi wartościami domyślnymi parametrów daje różne wyniki.

Ciekawostka

Istnieje wiele wbudowanych funkcji, które pozwolą ci wykonać często powtarzane zadania programistyczne, np. czytanie/zapisywanie plików. To wszystko, aby szybciej pisać bardziej skomplikowane programy.

Aby utworzyć nazwaną funkcję z własnym kodem, zastosuj słowo def – skrót od słowa „definiuj”.

Zapamiętaj kilka ciekawych cech funkcji w Python:

  • można ustalać wartości domyślne wybranych argumentów,

  • można wywoływać funkcję z użyciem nazw argumentów w dowolnej kolejności,

  • jeśli funkcja nie zwraca jawnie żadnej wartości, wówczas zwraca typ None.

Ciekawostka

W Pythonie – w przeciwieństwie do takich języków jak C++, Java, Pascal – funkcja może być argumentem jakieś funkcji, może być wynikiem (wartością zwracaną) funkcji, można ją podstawiać pod zmienne itp.

Definiujemy własną funkcję

W tym ćwiczeniu zdefiniujesz własną funkcję, która na podstawie dwóch wartości (bieżącego roku i roku urodzenia) będzie obliczała wiek osoby. Aby ta funkcja była dostępna dla każdego, opiszesz jej sposób wykonywania (docstring).

def wylicz_wiek(rok_aktualny, rok_urodzenia):
	'''
	rok_aktualny  np. 2019 - int
	rok_urodzenia np. 1974 - int
	funkcja zwraca wyliczony wiek - int
	'''
	wyliczony_wiek = rok_aktualny - rok_urodzenia
	return wyliczony_wiek
Rlg9DAKUpNmTg

Zwróć uwagę na kolejne elementy, które musisz zastosować:

  • słowo kluczowe def,

  • nazwę funkcji,

  • parametry funkcji,

  • opis funkcji – docstring,

  • obliczenie wieku przez zastosowanie zmiennej wewnątrz funkcji i operatora odejmowania,

  • słowo kluczowe return.

Ważne!

Jeżeli przy słowie kluczowym return nie stoi żadne wyrażenie inne niż None lub funkcja nie zawiera słowa kluczowego return, to w języku Python funkcja zawsze zwraca wartość None.

Ćwiczenie 1

W środowisku IDLE stwórz definicję funkcji, ktora będzie mnożyć dwa parametry, a następnie spróbuj ją wywołać dla różnych danych wejściowych, aby uzyskać różne wyniki.

Funkcja print

Polecenie 1

W środowisku Python 3 użyj funkcji print jak we fragmencie kodu poniżej. Zauważ, że system operacyjny nie ma tu większego znaczenia.

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> print('To jest podstawowa funkcja - wypisuje na ekran')
To jest podstawowa funkcja - wypisuje na ekran
>>>
R1Yzv2TwZUoOv
Ćwiczenie 2
Połącz w pary odpowiednie treści. Funkcja w Python 3 a w Python 2 Możliwe odpowiedzi: 1. różni się – w Python 2 jest poleceniem, a nie funkcją., 2. może przyjąć kilka argumentów/parametrów., 3. działa tak samo w Windows i w Linuksie. Funkcja print w języku Python 3 Możliwe odpowiedzi: 1. różni się – w Python 2 jest poleceniem, a nie funkcją., 2. może przyjąć kilka argumentów/parametrów., 3. działa tak samo w Windows i w Linuksie. Funkcja w Pythonie Możliwe odpowiedzi: 1. różni się – w Python 2 jest poleceniem, a nie funkcją., 2. może przyjąć kilka argumentów/parametrów., 3. działa tak samo w Windows i w Linuksie.
Ważne!
Oto funkcja print i jej parametry.
Oto funkcja print i jej parametry.
print('To jest podstawowa funkcja - wypisuje na ekran')

print – nazwa funkcji; w języku angielskim oznacza „drukuj”, więc drukuje/wypisuje informacje tekstowe na ekranie, ale nie tylko na ekranie;

'To jest podstawowa funkcja - wypisuje na ekran' – argument, w postaci ciągu znaków, przekazywany do funkcji. Podprogramy mogą przyjmować różne parametry. Do funkcji print również można przekazać ich więcej. Aby dowiedzieć się więcej na temat możliwych operacji, warto zajrzeć do dokumentacji.

Ciekawostka

Oto przykład oryginalnej dokumentacji do funkcji print:

print(*objects, sep=' ', end='\\n', file=sys.stdout, flush=False)

Print objects to the text stream file, separated by sep and followed by end. sep, end, file and flush, if present, must be given as keyword arguments. All non‑keyword arguments are converted to strings like str() does and written to the stream, separated by sep and followed by end. Both sep and end must be strings; they can also be None, which means to use the default values. If no objects are given, print() will just write end. The file argument must be an object with a write(string) method; if it is not present or None, sys.stdout will be used. Since printed arguments are converted to text strings, print() cannot be used with binary mode file objects. For these, use file.write(...) instead. Whether output is buffered is usually determined by file, but if the flush keyword argument is true, the stream is forcibly flushed.

Changed in version 3.3: Added the flush keyword argument.

Ćwiczenie 3

Napisz funkcję z przypisaniem wyniku do zmiennej, a następnie wydrukuj ją na ekranie, korzystając z funkcji print.

RPPsZelhXunUA

Funkcja zwracająca więcej niż jeden parametr

W języku Python funkcja może zwrócić więcej niż jedną wartość. Zastanów się, jak zapisać funkcję, która na podstawie roku urodzenia oblicza wiek osoby i od razu sprawdza, czy to osoba pełnoletnia. Funkcja ta ma zwrócić obie te informacje. Zapisujesz to w następujący sposób:

return wartosc_1, wartosc_2

Przeanalizuj taki kod funkcji:

def jaki_wiek(rok_urodzenia, aktualny_rok=2019):
    '''
    funkcja zwraca wiek w latach - int
    oraz informację czy osoba jest pełnoletnia - bool
    '''
    
    wiek = aktualny_rok - rok_urodzenia
    
    if wiek > 17:
        dorosla = True
    else:
        dorosla = False
    
    return wiek, dorosla

W ten sposób możesz sprawić, że funkcja będzie bardziej przydatna, gdy zrobi kilka rzeczy, a ty tylko poznasz wyniki. To naprawdę bardzo ciekawy sposób programowania. Musisz tylko pamiętać, aby w wywołaniu takiej funkcji odpowiednio odebrać te dane.

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> def jaki_wiek(rok_urodzenia, aktualny_rok=2019):
    '''
    funkcja zwraca wiek w latach - int
    oraz informację czy osoba jest pełnoletnia - bool
    '''
    wiek = aktualny_rok - rok_urodzenia
    if wiek > 17:
        dorosla = True
    else:
        dorosla = False
    return wiek, dorosla

>>> jaki_wiek(1974)
(45, True)
>>> jaki_wiek(1974, 2019)
(45, True)
>>> a, b = jaki_wiek(1974, 2019)
>>> a
45
>>> b
True
>>>
Ważne!

Zwróć uwagę, że w linii, w której przypisujesz wynik funkcji do zmiennych a i b, używasz przecinka między tymi zmiennymi. Tyle, ile wartości zwraca funkcja, tyle musisz zarezerwować zmiennych odbierających.

Słownik

funkcja
funkcja

wydzielona część kodu, nazywana także podprogramem, wykonująca określone operacje, możliwa do wywołania wiele razy podczas działania programu

parametr
parametr

umożliwia przekazanie argumentów, czyli danych wejściowych, do funkcji. W większości języków programowania wartości parametrów definiuje się podczas procesu deklaracji podprogramu