Pythonis funktsioonide loomine: def võtmesõna täielik juhend algajatele

1. Mis on def Pythonis?

def võtmesõna Pythonis kasutatakse funktsioonide defineerimiseks. Funktsioonid on põhilised struktuurid, mis aitavad koodi taaskasutada ja programme paremini organiseerida. def abil saab luua koodiploki, mis täidab teatud ülesande ning mida saab korduvalt kasutada. See parandab koodi loetavust ja aitab vähendada vigade tekkimise tõenäosust.

def võtmesõna põhistruktuur

Põhiline süntaks on järgmine:

def funktsiooni_nimi(argument1, argument2, ...):
    toimingud
    return tagastusväärtus

Pärast def kirjutatakse funktsiooni nimi ning sulgudesse vajalikud argumendid. Seejärel kirjutatakse kooloni järel sisuga plokk (indenteeritult). Vajadusel saab väärtust tagastada return lausega.

2. def põhistruktuur ja kasutusviisid

Kuidas defineerida põhifunktsiooni

Funktsiooni defineerimiseks def abil tuleb määrata funktsiooni nimi, argumentide loetelu ja sisu. Näiteks järgmine kood näitab lihtsat funktsiooni, mis väljastab “Hello, World!”:

def say_hello():
    print("Hello, World!")

Selle funktsiooni saab kutsuda välja say_hello(), mis kuvab konsoolis “Hello, World!”.

Indenteerimise olulisus

Pythonis on indenteerimine väga oluline. Kõik koodiread, mis asuvad funktsiooni sees, peavad olema samal indenteerimistasemel. Indenteerimine määrab koodi struktuuri ja plokid, ning valesti indenteeritud kood tekitab vigu.

Funktsiooni väljakutsumine

Defineeritud funktsiooni kutsutakse välja, lisades funktsiooni nimele sulud. Kui on argumendid, lisatakse need sulgude sisse.

say_hello()

 

年収訴求

3. Funktsioonide argumendid ja vaikeväärtused

Positsiooni- ja võtme-argumendid

Funktsioonid võivad võtta argumente, mis jagunevad positsiooniargumentideks ja võtme-argumentideks. Positsiooniargumendid edastatakse kindlas järjekorras, võtme-argumendid aga nime järgi ning neid võib anda suvalises järjekorras.

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

Ülaltoodud funktsioonis on greeting vaikeväärtus. Kui kutsuda greet("Alice"), kuvatakse “Hello, Alice!”.

Muutuva arvu argumendid

Mõnikord on vaja, et funktsioon aktsepteeriks muutuva arvu argumente. Pythonis saab selleks kasutada *args ja **kwargs.

def print_args(*args):
    for arg in args:
        print(arg)

print_args(1, 2, 3)

Selles näites võtavad *args kõik argumendid vastu tuplena.

4. Väärtuse tagastamine return lausega

return lause kasutamine

Kui soovid funktsioonist arvutatud väärtust tagastada, kasuta return-lauseid. Kui return puudub, tagastab funktsioon vaikimisi None.

def add(a, b):
    return a + b

result = add(3, 4)
print(result)  # 7

See add funktsioon tagastab kahe arvu summa. return abil saab väärtuse salvestada muutujasse.

Mitme väärtuse tagastamine

Pythonis saab funktsioon tagastada ka mitu väärtust, eraldades need komaga. Need väärtused tagastatakse tuplena.

def swap(a, b):
    return b, a

x, y = swap(1, 2)
print(x, y)  # 2 1

 

年収訴求

5. Muutujate ulatus ja eluaeg

Lokilised ja globaalsed muutujad

Funktsioonis defineeritud muutujad on lokaalsed ning neid saab kasutada ainult selles funktsioonis. Funktsiooni väliselt defineeritud muutujad on globaalsed ning neid saab kasutada kõikjal programmis.

x = "global"

def func():
    x = "local"
    print(x)

func()      # local
print(x)    # global

Selles näites on x lokaalne muutuja funktsiooni func sees ning ei mõjuta välist muutujat.

global võtmesõna

Kui soovid funktsioonist muuta globaalset muutujat, kasuta global võtmesõna.

x = "global"

def change_global():
    global x
    x = "changed"

change_global()
print(x)  # changed

6. Praktilised näited ja kasutusviisid

Funktsioonidega programmi tõhustamine

Funktsioonide kasutamine aitab programmi tõhusamaks muuta. Näiteks korduvaid arvutusi või andmete töötlemist saab koondada ühte funktsiooni ning seeläbi vähendada koodi dubleerimist.

def calculate_area(radius):
    return 3.14 * radius * radius

area1 = calculate_area(5)
area2 = calculate_area(10)

See näide defineerib funktsiooni calculate_area, millega arvutada ringi pindala. Funktsiooni saab kasutada nii mitu korda kui vaja.

Funktsioonide kasutamise näide

Teine näide: funktsioon, mis vormindab teksti vastavalt soovitud joondamisele.

def format_text(text, alignment="left"):
    if alignment == "left":
        return text.ljust(20)
    elif alignment == "right":
        return text.rjust(20)
    elif alignment == "center":
        return text.center(20)

print(format_text("Hello", "center"))

See funktsioon vormindab teksti vasakule, paremale või keskele joondatult.

7. Täiustatud funktsioonikontseptsioonid

Pesastatud funktsioonid

Pythonis võib funktsiooni sees defineerida teise funktsiooni, mida nimetatakse pesastatud funktsiooniks. Seda saab kasutada ainult välise funktsiooni sees.

def outer():
    def inner():
        print("See on sisemine funktsioon")
    inner()

Anonüümsed funktsioonid (Lambda)

lambda võtmesõnaga saab luua anonüümseid (nimetuid) funktsioone, mis sobivad lihtsate ülesannete jaoks, mida kasutatakse vaid korra.

square = lambda x: x * x
print(square(5))  # 25

Dekoraatorid

Dekoraator on viis olemasoleva funktsiooni käitumise laiendamiseks ilma funktsiooni ennast muutmata. See on funktsioon, mis võtab argumendiks teise funktsiooni ja tagastab uue funktsiooni.

def decorator(func):
    def wrapper():
        print("Enne funktsiooni")
        func()
        print("Pärast funktsiooni")
    return wrapper

@decorator
def say_hello():
    print("Tere!")

say_hello()

8. Kokkuvõte

Selles artiklis selgitasime, kuidas kasutada def võtmesõna Pythonis funktsioonide loomiseks, käsitlesime argumente, tagastusväärtusi, ulatust ja ka edasijõudnutele mõeldud teemasid. Funktsioonide kasutamine aitab ehitada paremini struktureeritud ja tõhusamaid programme. Proovi kasutada erinevaid funktsioone, et parandada oma Python programmeerimisoskusi!

9. Korduma kippuvad küsimused (KKK)

Mis vahe on return ja print vahel?

Kuigi return ja print võivad tunduda sarnased, täidavad nad erinevaid rolle. return tagastab funktsioonist väärtuse, mida saab kasutada mujal programmis, näiteks salvestada muutujasse. print kuvab väärtuse lihtsalt konsoolile, kuid seda väärtust ei saa hiljem kasutada.

def add(a, b):
    return a + b

result = add(3, 4)  # result salvestab väärtuse 7
print(result)  # 7

def display_message():
    print("Hello, World!")

display_message()  # Kuvab "Hello, World!", kuid väärtust ei tagasta

Mis on pesastatud funktsioonide eelised?

Pesastatud funktsioonide abil saab luua lokaalseid funktsioone, millele väljastpoolt ligi ei pääse. See aitab kapseldada loogikat ja parandab koodi korduvkasutatavust. Samuti saavad pesastatud funktsioonid ligi välise funktsiooni ulatusele.

Millal kasutada muutuva arvu argumente?

Muutuva arvu argumente kasutatakse siis, kui pole teada, mitu argumenti funktsioon saab. Näiteks kui soovid kirjutada funktsiooni, mis arvutab suvalise arvu väärtuste summa.

def add_all(*args):
    return sum(args)

result = add_all(1, 2, 3, 4, 5)  # 15

Kuidas kasutada rekursiivseid funktsioone?

Rekursiivne funktsioon kutsub iseennast välja. Seda kasutatakse sageli probleemide lahendamiseks, mida saab jagada väiksemateks osadeks. Samas tuleb olla ettevaatlik, et vältida lõputut rekursiooni (stack overflow). Näiteks faktoriaali arvutamiseks:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

result = factorial(5)  # 120