Függvény
Függvény (def)
A „def” kulcsszó a Python nyelvben a függvények definiálására szolgál. A függvények olyan kódrészletek, amelyeket újra és újra használhatunk a programunkban, ezáltal csökkentve a kódképzési időt és javítva a kód olvashatóságát.
A függvények definiálásához használatos „def” kulcsszó után a függvény neve következik, amelyet zárójelekbe kell tennünk. Az zárójelekben szerepelnek a függvény bemenő paraméterei. Az utasításokat kettősponttal kell lezárni és indentálni (bekezdeni) kell őket a következő sorban.
Példa
Például, ha szeretnénk egy függvényt definiálni, amely két számot ad össze, akkor írhatunk egy ilyen függvénydefiníciót:
def osszeadas(szam1, szam2):
eredmeny = szam1 + szam2
return eredmeny
Ezután hívhatjuk a függvényt a következő módon:
eredmeny = osszeadas(2, 3)
print(eredmeny)
5
A fenti példában láthatjuk, hogy a „def” kulcsszó után a függvény neve következik, amelyet zárójelekbe helyeztünk. Az utasításokat kettősponttal zártuk le, és indentáltuk őket. A függvény visszatérési értékét a „return” kulcsszóval adtuk meg.
A függvény hívásakor az argumentumokat a zárójelekbe helyezzük, és a függvény nevét követően írjuk. A függvény visszatérési értékét a változóba mentjük, majd a „print” függvénnyel kinyomtatjuk az eredményt.
A függvényekkel egyszerűbbé tehetjük a programunkat, mert így elkerülhetjük a kódkészítés ismétlését. A függvényeket használhatjuk bármilyen programozási feladat megoldására. Nagyon fontos, hogy a függvény neve beszédes és érthető legyen, és a függvény egyszerre csak egy dolgot csináljon.
A „def” kulcsszó használatával új függvényeket hozhatunk létre a programunkban, amelyeknek különböző bemenő paramétereik és visszatérési értékeik lehetnek.
Példák lépésenként
def eljaras(): #Egy függvényt mindig definiálni kell
print("Nincs visszateréséri érték")
A def eljaras():
sorral kezdődő kód egy egyszerű eljárás definíciót mutat Pythonban, amelynek nincs visszatérési értéke, csak kinyomtat egy szöveget a konzolra.
eljaras() #így lehet behíni
Nincs visszateréséri érték
def fgv():
print("függvény törzse")
visszateresi_ertek = 10
return visszateresi_ertek
A fgv
nevű függvény a print()
függvénnyel kiírja a „függvény törzse” szöveget a konzolra, majd definiál egy visszateresi_ertek
változót, amelynek értéke 10. Végül visszatér ezzel az értékkel. A függvény hívása esetén az így visszatérő értéket eltárolhatjuk egy változóban, vagy közvetlenül felhasználhatjuk a kódban.
print(fgv())
függvény törzse
10
def fgv2():
print("törzs")
v1 = 10
v2 = 20
return [v1, v2]
A fgv2
nevű függvény a print()
függvénnyel kiírja a „törzs” szöveget a konzolra, majd két változót (v1 és v2) definiál, amelyeknek az értékei rendre 10 és 20. Végül visszatér egy listával, amelyben az előbb említett két változó szerepel.
print(fgv2())
törzs
[10, 20]
def fgv3(p):
print(f'paraméter: {p}')
return p*2
A fgv3
nevű függvény egy kötelezően megadandó paramétert (p
) kap, majd kiírja annak értékét. Végül visszatér a paraméter kétszeresével. A függvény akkor használható, ha megadjuk neki a kötelező paramétert a hívás során.
fgv3(10)
paraméter: 10
20
def fgv4(p = 10):
print(f'paraméter: {p}')
return p*2
A fgv4
nevű függvény egy opcionális paramétert (p
) kap, amelynek alapértéke 10. A függvény kiírja a paraméter értékét a konzolra, majd visszatér a paraméter kétszeresével. Ha a függvényt hívásakor nem adunk meg paramétert, akkor az alapérték (10) lesz használva.
print(fgv4())
print(fgv4(15)) #Paraméter felül lesz írva
paraméter: 10
20
paraméter: 15
30
def fgv6(p):
print(f'paraméter: {p}')
p[0] = p[0] + 1
A fgv6
nevű függvény egy listát kap paraméterként, majd kiírja annak értékét. Ezután megváltoztatja a lista első elemét, majd nem ad vissza semmilyen értéket. Mivel a függvény az eredeti lista első elemét változtatja meg, az eredeti lista értéke is megváltozik, amikor ezt a függvényt meghívják.
x=[0]
print(f'x értéke hívás előtt: {x}')
fgv6(x)
print(f'x értéke hívás után: {x}')
x értéke hívás előtt: [0]
paraméter: [0]
x értéke hívás után: [1]
Első eleme 0
. Ezután kiírja az x
értékét a konzolra. Az fgv6
függvényt az x
listával hívják meg, amelynek eredményeként a függvény megváltoztatja az x
lista első elemét. Ezután kiírja az x
értékét a konzolra újra, és látható, hogy az értéke megváltozott a függvényhívás után, mert a függvény megváltoztatta az eredeti listát. A függvény nem ad vissza értéket, ezért az eredmény None
lesz.
def fgv7(p1, p2):
print(f'p1 = {p1}')
print(f'p2 = {p2}')
return p1 * p2
A fgv7
nevű függvény két paramétert (p1
és p2
) kap, majd kiírja a konzolra az értéküket, majd visszatér a két paraméter szorzatával.
e1 = fgv7(10, 20)
print(e1)
print(fgv7(20,4))
p1 = 10
p2 = 20
200
p1 = 20
p2 = 4
80
def fgv3(p):
print(f'paraméter: {p}')
return p*2
A függvény egy egész számot kap paraméterként, majd visszatérési értékként igazat ad vissza, ha a szám páratlan, hamisat ha a szám páros.
for i in range(1, 10):
if paratlan(i):
print(i, end =' ')
1 3 5 7 9
Szökőév
Ez a kód a felhasználó által megadott két évszám közötti szökőéveket listázza ki. A szokoev() függvény megállapítja, hogy egy év szökőév-e, míg az utána következő rész az adott évszámokra vonatkozóan hívja meg a szokoev() függvényt, majd kiírja a szökőéveket.
def szokoev(ev):
return ev % 400 == 0 or ev % 4 == 0 and ev % 100 !=0
a = int(input('Kérem a kezdőévet: '))
b = int(input('Kérem a másik évszámot: '))
if a>b:
a,b=b,a # a nagyobbra cseréli
sze = [e for e in range(a, b + 1) if szokoev(e)]
if len(sze) !=0:
print('Szökőévek: ', *sze, sep="; ")
else:
print('Nincs szökőév a megadott tartományban')
Kérem a kezdőévet: 1222
Kérem a másik évszámot: 2333
Szökőévek: ; 1224; 1228; 1232; 1236; 1240; 1244; 1248; 1252; 1256; 1260; 1264; 1268; 1272; 1276; 1280; 1284; 1288; 1292; 1296; 1304; 1308; 1312; 1316; 1320; 1324; 1328; 1332; 1336; 1340; 1344; 1348; 1352; 1356; 1360; 1364; 1368; 1372; 1376; 1380; 1384; 1388; 1392; 1396; 1404; 1408; 1412; 1416; 1420; 1424; 1428; 1432; 1436; 1440; 1444; 1448; 1452; 1456; 1460; 1464; 1468; 1472; 1476; 1480; 1484; 1488; 1492; 1496; 1504; 1508; 1512; 1516; 1520; 1524; 1528; 1532; 1536; 1540; 1544; 1548; 1552; 1556; 1560; 1564; 1568; 1572; 1576; 1580; 1584; 1588; 1592; 1596; 1600; 1604; 1608; 1612; 1616; 1620; 1624; 1628; 1632; 1636; 1640; 1644; 1648; 1652; 1656; 1660; 1664; 1668; 1672; 1676; 1680; 1684; 1688; 1692; 1696; 1704; 1708; 1712; 1716; 1720; 1724; 1728; 1732; 1736; 1740; 1744; 1748; 1752; 1756; 1760; 1764; 1768; 1772; 1776; 1780; 1784; 1788; 1792; 1796; 1804; 1808; 1812; 1816; 1820; 1824; 1828; 1832; 1836; 1840; 1844; 1848; 1852; 1856; 1860; 1864; 1868; 1872; 1876; 1880; 1884; 1888; 1892; 1896; 1904; 1908; 1912; 1916; 1920; 1924; 1928; 1932; 1936; 1940; 1944; 1948; 1952; 1956; 1960; 1964; 1968; 1972; 1976; 1980; 1984; 1988; 1992; 1996; 2000; 2004; 2008; 2012; 2016; 2020; 2024; 2028; 2032; 2036; 2040; 2044; 2048; 2052; 2056; 2060; 2064; 2068; 2072; 2076; 2080; 2084; 2088; 2092; 2096; 2104; 2108; 2112; 2116; 2120; 2124; 2128; 2132; 2136; 2140; 2144; 2148; 2152; 2156; 2160; 2164; 2168; 2172; 2176; 2180; 2184; 2188; 2192; 2196; 2204; 2208; 2212; 2216; 2220; 2224; 2228; 2232; 2236; 2240; 2244; 2248; 2252; 2256; 2260; 2264; 2268; 2272; 2276; 2280; 2284; 2288; 2292; 2296; 2304; 2308; 2312; 2316; 2320; 2324; 2328; 2332
Másképpen:
def szokoev(ev):
if (ev % 400 == 0):
return True
if (ev % 4 == 0 and ev % 100 != 0):
return True
return False
- Az első feltételvizsgálat (
ev % 400 == 0
) azt ellenőrzi, hogy az év osztható-e 400-zal. Ha igen, akkor szökőévnek tekintjük, és a függvényTrue
értékkel tér vissza. - Ha az első feltétel nem teljesül, a következő feltételvizsgálat következik (
ev % 4 == 0 and ev % 100 != 0
). Ez ellenőrzi, hogy az év osztható-e 4-gyel és nem osztható 100-zal. Ha mindkét feltétel igaz, akkor szintén szökőévnek tekintjük az évet, és a függvényTrue
értékkel tér vissza. - Ha egyik feltétel sem teljesül, akkor az év nem szökőév, és a függvény
False
értékkel tér vissza.
def feladat():
ev1 = int(input('Kérem az egyik évszámot: '))
ev2 = int(input('Kérem a másik évszámot: '))
if (ev1 < ev2):
tol = ev1
ig = ev2
else:
tol = ev2
ig = ev1
- A következő két sorban bekérjük a felhasználótól az évszámokat,
ev1
-et ésev2
-t. - A
if
szerkezet eldönti, hogy melyik évszám a kisebb és melyik a nagyobb. A kisebb évszám kerül azev1
változóba, a nagyobb pedig azev2
változóba. Ez biztosítja, hogy helyesen definiáljuk a tartományt, amelyet később végig fogunk iterálni.
szokoevek = []
for ev in range(tol, ig + 1):
if szokoev(ev):
szokoevek.append(ev)
- Egy üres listát,
szokoevek
-et hozunk létre, amelyben tárolni fogjuk a szökőéveket. - Egy
for
ciklussal végigiterálunk atol
ésig
közötti értékeken (beleértve mindkét végpontot is). - Minden iterációban meghívjuk a
szokoev
függvényt az adott évszámra, és ha az eredményTrue
, hozzáadjuk az évszámot aszokoevek
listához.
if (len(szokoevek) == 0):
print('Nincs szökőév a megadott tartományban!')
else:
str = 'Szökőévek: '
for ev in szokoevek:
str += '{0}; '.format(ev)
print(str[:-2])
- A következő
if-else
szerkezetben ellenőrizzük, hogy van-e szökőév a megadott tartományban. - Ha a
szokoevek
lista hossza 0, akkor kiírjuk, hogy nincs szökőév a megadott tartományban. - Ellenkező esetben elkészítjük a szökőévek listájának szöveges reprezentációját. Az
str
változóban tároljuk a kezdeti szöveget, majd afor
ciklussal végigiterálunk aszokoevek
listán, és hozzáfűzzük az évszámot a szöveghez. - Végül kiírjuk a szöveget, figyelve arra, hogy az utolsó szökőév utáni pontosvesszőt és szóközt ne írjuk ki (
str[:-2]
).
Teljes kód:
def szokoev(ev):
if (ev % 400 == 0):
return True
if (ev % 4 == 0 and ev % 100 != 0):
return True
return False
def feladat():
ev1 = int(input('Kérem az egyik évszámot: '))
ev2 = int(input('Kérem az másik évszámot: '))
if (ev1 < ev2):
tol = ev1
ig = ev2
else:
tol = ev2
ig = ev1
szokoevek = []
for ev in range(tol, ig + 1):
if szokoev(ev):
szokoevek.append(ev)
if (len(szokoevek) == 0):
print('Nincs szökőév a megadott tartományban!')
else:
str = 'Szökőévek: '
for ev in szokoevek:
str += '{0}; '.format(ev)
print(str[:-2])