Denne artikel vil hjælpe læseren med at fortsætte fra den tidligere blog om Python-funktioner sammen med nogle grundlæggende anvendelser i den virkelige verden. Vi vil bruge Visual Studio Code som vores kodeeditor. Hvis du ikke har installeret Visual Studio Code, er instruktionerne givet i den første blog.
Avancerede funktioner i Python – indholdsfortegnelse:
- Overførsel af funktioner til andre funktioner
- Brug af funktioner inde i en funktion
- *Args i Python
- “*” operator i Python
- **kwargs i Python
Overførsel af funktioner til andre funktioner
Som diskuteret i den tidligere blog, behandles funktioner i Python som objekter. Så ligesom objekter i Python, kan funktioner også overføres som et argument til en anden funktion.
For eksempel:
def mul(x, y): return x*y def add(mul, y): return mul+y x = add(mul(9, 10), 10) print(x)
I den ovenstående kodeblok kan det ses, at mul-funktionen overføres som et argument til add-funktionen, og det gemmes i x-variablen, som derefter udskrives for at bekræfte svaret.
100
Brug af funktioner inde i en funktion
I Python kan vi definere en funktion inde i en anden funktion. Disse funktioner kaldes indlejrede funktioner. Men i dette brugsscenarie kan den indre funktion eller indlejrede funktion ikke kaldes separat. Begge eksempler er illustreret i den følgende kodeblok.
Lad os skrive vores første funktion.
def mul(x, y): m = x*y def square(m): return m*m return square(m) x = mul(9, 10) print(x)
Output: 8100
I den ovenstående kodeblok er den ydre funktion “mul”, som returnerer funktionen square, der tager et argument “m”, som er multiplikationen af de to argumenter givet til “mul”-funktionen. Kodeeksekveringen starter først med at kalde “mul”-funktionen, hvorefter produktet af “x” og “y” gemmes i “m”-variablen. Da denne funktion returnerer square-funktionen, kaldes “square”-funktionen, og det endelige produkt, som er kvadratet af “m”, returneres.
Lad os lære nogle vigtige ting i Python, som vil gøre din kodningsrejse med Python meget bedre.
*Args i Python
Disse er argumenterne, som vi bruger som funktionsparametre. Lad os skrive en almindelig funktion ved hjælp af det, vi har lært indtil nu. Vi vil skrive en funktion, der kan give os det maksimale areal af et rektangel givet 2 rektangelarealer som parametre til funktionen.
def maxarea(a, b): if a > b: return f'rektangel a har det større areal, som er {a}' else: return f'rektangel a har det større areal, som er {b}' x = maxarea(100, 60) print(x)
Output: rektangel a har det større areal, som er 100
Denne funktion er god til 2 parametre eller argumenter, men hvad hvis vi skal sammenligne mere end 2 arealer. En tilgang ville være at overføre en liste af arealer til funktionen.
def maxarea(lis): max = 0 for i in lis: if i > max: max = i return f"rektangel, som har det større areal, er {max}" x = maxarea([100, 60, 50]) print(x)
Output: rektangel, som har det større areal, er 100
Denne tilgang er god, men vi bør vide antallet af parametre eller argumenter på forhånd. I realtidskodeeksekvering ville dette være en besvær. Derfor, for at gøre programmørens liv lettere, bruger Python *args og **kwargs.
“*” operator i Python
Denne operator er en udpakningsoperator, som normalt bruges til at overføre et uspecificeret antal parametre eller argumenter.
Udpakning af argumenter til tuple ved hjælp af * operator
Som vi har set, bruges “*” operatoren til at udpakke værdier. Eksemplet er illustreret nedenfor.
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)
Som vi kan se, har udpakningsoperatoren udpakket listen x og listen y til tuplen z. Vi kan også se, at resultatet er en tuple.
Lad os skrive den samme funktion ved hjælp af *Args.
def maxarea(*lis): max = 0 for i in lis: if i > max: max = i return f"rektangel, som har det større areal, er {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: rektangel, som har det større areal, er 200 rektangel, som har det større areal, er 9000 rektangel, som har det større areal, er 100
I denne kodeblok kan vi se, at argumenterne nu er dynamiske, vi kan tilføje et vilkårligt antal argumenter, der vil blive udpakket i maxarea-funktionen for at give os det ønskede resultat. Desuden kan vi sammenligne et vilkårligt antal arealer i denne sammenhæng.
**kwargs i Python
kwargs er ligesom args, men det accepterer positionsargumenter. Det bruger ** operatoren, som har nogle egenskaber som at udpakke flere positionsargumenter af enhver længde, kan også udpakke ordbøger, kan også bruges til at kombinere to ordbøger.
Sammensmeltning af ordbøger
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {**a, **b} print(type(c)) print(c) Vi kan se fra den ovenstående kode, at vi har 2 ordbøger a og b, som er smeltet sammen ved hjælp af ** operatoren for at give en anden ordbog. Output: <class 'dict'> {'h': 1, 'n': 2, 'm': 5, 'l': 10}
Når vi bruger * operatoren i stedet for ** operatoren, er koden for denne sag illustreret nedenfor.
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'}
Derfor, når * operatoren bruges på to ordbøger for at smelte sammen, vil resultatet være et sæt med kun nøglerne fra ordbogen.
maxarea-funktionen ved hjælp af **kwargs er illustreret i den nedenstående kodeblok.
def maxarea(**lis): max = 0 for i in lis.values(): if i > max: max = i return f"rektangel, som har det større areal, er {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: rektangel, som har det større areal, er 3 rektangel, som har det større areal, er 2 rektangel, som har det større areal, er 9
I denne blog om avancerede funktioner i Python har vi dækket emner som overførsel af funktioner til andre funktioner, brug af funktioner inde i en funktion, *Args i Python, “*” operator i Python, **kwargs i Python, og mere. De videre emner, som inkluderer klasser, vil blive dækket i den næste blogindlæg. Opgaver vedrørende avancerede funktioner i Python er givet nedenfor.
Agnieszka Markowska-Szmaj
Python Course From Beginner to Advanced in 11 blog posts:
- Python-tupler, lister, sæt og ordbøger. Del 3 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Python-funktioner. Del 7 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Introduktion til Python-kursus. Del 1 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Variabler og datatyper i Python. Del 2 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Python sæt og ordbøger. Del 4 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Python-klasser og -objekter. Del 9 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Filer i Python. Del 10 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Løkker i Python. Del 6 Python-kursus fra nybegynder til avanceret i 11 blogindlæg
- Avancerede funktioner i Python. Del 8 Python-kursus fra nybegynder til avanceret i 11 blogindlæg