Tämä artikkeli auttaa lukijaa jatkamaan edellisestä Python-funktioita käsittelevästä blogista yhdessä joidenkin perus sovellusten kanssa todellisessa maailmassa. Käytämme Visual Studio Codea koodieditorina. Jos et ole asentanut Visual Studio Codea, ohjeet löytyvät ensimmäisestä blogista.
Edistyneet funktiot Pythonissa – sisällysluettelo:
- Funktioiden välittäminen toisille funktioille
- Funktioiden käyttäminen funktion sisällä
- *Args Pythonissa
- “*” operaattori Pythonissa
- **kwargs Pythonissa
Funktioiden välittäminen toisille funktioille
Kuten edellisessä blogissa keskusteltiin, funktiot Pythonissa käsitellään objekteina. Joten kuten objektit Pythonissa, funktioita voidaan myös välittää argumenttina toiselle funktiolle.
Esimerkiksi:
def mul(x, y): return x*y def add(mul, y): return mul+y x = add(mul(9, 10), 10) print(x)
Yllä olevassa koodilohkossa voidaan nähdä, että mul-funktio välitetään argumenttina add-funktiolle ja se tallennetaan x-muuttujaan, joka sitten tulostetaan vastauksen vahvistamiseksi.
100
Funktioiden käyttäminen funktion sisällä
Pythonissa voimme määritellä funktion toisen funktion sisällä. Näitä funktioita kutsutaan sisäkkäisiksi funktioiksi. Mutta tässä käyttötapauksessa sisäistä tai sisäkkäistä funktiota ei voida kutsua erikseen. Molemmat esimerkit on havainnollistettu seuraavassa koodilohkossa.
Kirjoitetaan ensimmäinen funktiomme.
def mul(x, y): m = x*y def square(m): return m*m return square(m) x = mul(9, 10) print(x)
Output: 8100
Yllä olevassa koodilohkossa ulkoinen funktio on “mul”, joka palauttaa square-funktion, joka ottaa argumentin “m”, joka on kahden “mul”-funktion argumentin tulo. Koodin suoritus alkaa ensin kutsumalla “mul”-funktiota, sitten “x” ja “y” tulos tallennetaan “m”-muuttujaan. Koska tämä funktio palauttaa square-funktion, “square”-funktio kutsutaan ja lopullinen tuote, joka on “m”:n neliö, palautetaan.
Opitaan muutama tärkeä asia Pythonissa, jotka tekevät koodausmatkastasi Pythonin kanssa paljon parempaa.
*Args Pythonissa
Nämä ovat argumentteja, joita käytämme funktion parametreina. Kirjoitetaan tavallinen funktio käyttäen sitä, mitä olemme oppineet tähän mennessä. Kirjoitamme funktion, joka voi antaa meille suorakulmion maksimaalisen pinta-alan, kun annamme 2 suorakulmion pinta-alaa funktion parametreina.
def maxarea(a, b): if a > b: return f'suorakulmio a:lla on suurempi pinta-ala, joka on {a}' else: return f'suorakulmio a:lla on suurempi pinta-ala, joka on {b}' x = maxarea(100, 60) print(x)
Output: suorakulmio a:lla on suurempi pinta-ala, joka on 100 [code lang="js"]
Tämä funktio on hyvä 2 parametrille tai argumentille, mutta entä jos meidän täytyy verrata enemmän kuin 2 pinta-alaa. Yksi lähestymistapa olisi välittää lista pinta-aloista funktioon.
def maxarea(lis): max = 0 for i in lis: if i > max: max = i return f"suorakulmio, jolla on suurempi pinta-ala, on {max}" x = maxarea([100, 60, 50]) print(x)
Output: suorakulmio, jolla on suurempi pinta-ala, on 100
Tämä lähestymistapa on hyvä, mutta meidän pitäisi tietää etukäteen, kuinka monta parametria tai argumenttia annamme. Reaaliaikaisessa koodin suorittamisessa tämä olisi vaivalloista. Joten ohjelmoijan elämän helpottamiseksi Python käyttää *args ja **kwargs.
“*” operaattori Pythonissa
Tämä operaattori on purkuoperaattori, jota käytetään yleensä määrittämättömän määrän parametrien tai argumenttien välittämiseen.
Argumenttien purkaminen tupleksi käyttäen * operaattoria
Kuten olemme nähneet, “*” operaattoria käytetään arvojen purkamiseen. Esimerkki on havainnollistettu alla.
x = [1, 2, 3, 4] y = [5, 6, 7, 8] z = *x, *y print(type(z)) print(z)
Output: <class 'tuple'> (1, 2, 3, 4, 5, 6, 7, 8)
Kuten näemme, purkuoperaattori on purkanut listan x ja listan y tupleksi, joka on z. Voimme myös nähdä, että tulos on tuple.
Kirjoitetaan sama funktio käyttäen *Args.
def maxarea(*lis): max = 0 for i in lis: if i > max: max = i return f"suorakulmio, jolla on suurempi pinta-ala, on {max}" x = maxarea(100, 60, 50, 200) y = maxarea(100, 60, 50, 200, 9000) z = maxarea(100, 60, 50, 20, 90) print(x) print(y) print(z)
Output: suorakulmio, jolla on suurempi pinta-ala, on 200 suorakulmio, jolla on suurempi pinta-ala, on 9000 suorakulmio, jolla on suurempi pinta-ala, on 100
Tässä koodilohkossa voimme nähdä, että nyt argumentit ovat dynaamisia, voimme lisätä minkä tahansa määrän argumentteja, jotka puretaan maxarea-funktioon, jotta saamme halutun tuloksen. Voimme myös verrata mitä tahansa pinta-aloja tässä kontekstissa.
**kwargs Pythonissa
kwargs on kuin args, mutta se hyväksyy paikkansa pitävät argumentit. Se käyttää ** operaattoria, jolla on joitakin ominaisuuksia, kuten useiden paikkansa pitävien argumenttien purkaminen minkä tahansa pituuden mukaan, voi myös purkaa sanakirjoja, voi myös yhdistää kaksi sanakirjaa.
Sanakirjojen yhdistäminen
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {**a, **b} print(type(c)) print(c) Voimme nähdä yllä olevasta koodista, että meillä on 2 sanakirjaa a ja b, jotka on yhdistetty käyttäen ** operaattoria, jotta saadaan toinen sanakirja. Output: <class 'dict'> {'h': 1, 'n': 2, 'm': 5, 'l': 10}
Kun käytämme * operaattoria ** operaattorin sijaan, tämän tapauksen koodi on havainnollistettu alla.
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {*a, *b} print(type(c)) print(c)
Output: <class 'set'> {'n', 'l', 'm', 'h'}
Joten, kun * operaattoria käytetään kahden sanakirjan yhdistämiseen, tulos on joukko, jossa on vain avaimet sanakirjasta.
maxarea-funktio käyttäen **kwargs on havainnollistettu alla olevassa koodilohkossa.
def maxarea(**lis): max = 0 for i in lis.values(): if i > max: max = i return f"suorakulmio, jolla on suurempi pinta-ala, on {max}" x = maxarea(a=1, b=2, c=3) y = maxarea(a=1, b=2) z = maxarea(a=1, b=2, c=3, d=9) print(x) print(y) print(z)
Output: suorakulmio, jolla on suurempi pinta-ala, on 3 suorakulmio, jolla on suurempi pinta-ala, on 2 suorakulmio, jolla on suurempi pinta-ala, on 9
Tässä blogissa edistyneistä funktioista Pythonissa olemme käsitelleet aiheita, kuten funktioiden välittäminen toisille funktioille, funktioiden käyttäminen funktion sisällä, *Args Pythonissa, “*” operaattori Pythonissa, **kwargs Pythonissa ja paljon muuta. Tulevat aiheet, jotka sisältävät luokkia, käsitellään seuraavassa blogikirjoituksessa. Kotitehtävät edistyneistä funktioista Pythonissa on annettu alla.
Agnieszka Markowska-Szmaj
Python Course From Beginner to Advanced in 11 blog posts:
- Pythonin tuplet, listat, joukot ja sanakirjat. Osa 3 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Pythonin funktiot. Osa 7 Python-kurssi aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Johdatus Python-kurssiin. Osa 1 Python-kurssi aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Muuttujat ja tietotyypit Pythonissa. Osa 2 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Pythonin joukot ja sanakirjat. Osa 4 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Python-luokat ja -oliot. Osa 9 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Tiedostot Pythonissa. Osa 10 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Silmukat Pythonissa. Osa 6 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa
- Edistyneet toiminnot Pythonissa. Osa 8 Python-kurssista aloittelijasta edistyneeseen 11 blogikirjoituksessa