Šis straipsnis padės skaitytojui tęsti ankstesnį Python funkcijų tinklaraštį kartu su kai kuriomis pagrindinėmis taikymo sritimis realiame pasaulyje. Mes naudosime Visual Studio Code kaip mūsų kodo redaktorių. Jei dar nesate įdiegę Visual Studio Code, instrukcijos pateiktos pirmajame tinklaraštyje.
Pažangios funkcijos Python – turinys:
- Funkcijų perdavimas kitoms funkcijoms
- Funkcijų naudojimas funkcijoje
- *Args Python
- “*” operatorius Python
- **kwargs Python
Funkcijų perdavimas kitoms funkcijoms
Kaip aptarta ankstesniame tinklaraštyje, funkcijos Python yra laikomos objektais. Taigi, kaip objektai Python, funkcijos taip pat gali būti perduodamos kaip argumentas kitai funkcijai.
Pavyzdžiui:
def mul(x, y): return x*y def add(mul, y): return mul+y x = add(mul(9, 10), 10) print(x)
Viršutiniame kodo bloke matyti, kad mul funkcija perduodama kaip argumentas add funkcijai ir ji saugoma x kintamajame, kuris vėliau spausdinamas, kad būtų patvirtintas atsakymas.
100
Funkcijų naudojimas funkcijoje
Python galime apibrėžti funkciją kitoje funkcijoje. Šios funkcijos vadinamos įdėtinėmis funkcijomis. Tačiau šiuo atveju vidinė funkcija arba įdėtinė funkcija negali būti kviečiama atskirai. Abu pavyzdžiai iliustruojami žemiau pateiktame kodo bloke.
Parašykime savo pirmąją funkciją.
def mul(x, y): m = x*y def square(m): return m*m return square(m) x = mul(9, 10) print(x)
Išvestis: 8100
Viršutiniame kodo bloke išorinė funkcija yra “mul”, kuri grąžina square funkciją, kuri priima argumentą “m”, kuris yra dviejų argumentų, pateiktų “mul” funkcijai, daugyba. Kodo vykdymas pirmiausia prasideda kviečiant “mul” funkciją, tada “x” ir “y” produktas saugomas “m” kintamajame. Kadangi ši funkcija grąžina square funkciją, kviečiama “square” funkcija ir galutinis produktas, kuris yra “m” kvadratas, grąžinamas.
Pasimokykime keletą svarbių dalykų Python, kurie padarys jūsų kodavimo kelionę su Python daug geresnę.
*Args Python
Tai yra argumentai, kuriuos naudojame kaip funkcijos parametrus. Parašykime įprastą funkciją, naudodami tai, ką išmokome iki šiol. Rašysime funkciją, kuri gali suteikti mums didžiausią stačiakampio plotą, pateikus 2 stačiakampio plotus kaip parametrus funkcijai.
def maxarea(a, b): if a > b: return f'stačiakampis a turi didesnį plotą, kuris yra {a}' else: return f'stačiakampis a turi didesnį plotą, kuris yra {b}' x = maxarea(100, 60) print(x)
Išvestis: stačiakampis a turi didesnį plotą, kuris yra 100 [code lang="js"]
Ši funkcija yra gera 2 parametrams arba argumentams, tačiau kas, jei mums reikia palyginti daugiau nei 2 plotus. Vienas iš požiūrių būtų perduoti plotų sąrašą į funkciją.
def maxarea(lis): max = 0 for i in lis: if i > max: max = i return f"stačiakampis, kuris turi didesnį plotą, yra {max}" x = maxarea([100, 60, 50]) print(x)
Išvestis: stačiakampis, kuris turi didesnį plotą, yra 100
Šis požiūris yra geras, tačiau turėtume žinoti parametrų arba argumentų skaičių iš anksto. Realaus laiko kodo vykdymo metu tai būtų varginantis. Todėl, kad palengvintų programuotojo gyvenimą, Python naudoja *args ir **kwargs.
“*” operatorius Python
Šis operatorius yra išpakavimo operatorius, kuris paprastai naudojamas perduoti nenurodytą parametrų arba argumentų skaičių.
Argumentų išpakavimas į tuple naudojant * operatorių
Kaip matėme, “*” operatorius naudojamas vertėms išpakuoti. Pavyzdys iliustruotas žemiau.
x = [1, 2, 3, 4] y = [5, 6, 7, 8] z = *x, *y print(type(z)) print(z)
Išvestis: <class 'tuple'> (1, 2, 3, 4, 5, 6, 7, 8)
Kaip matome, išpakavimo operatorius išpakavo sąrašą x ir sąrašą y į tuple, kuris yra z. Taip pat matome, kad rezultatas yra tuple.
Parašykime tą pačią funkciją naudodami *Args.
def maxarea(*lis): max = 0 for i in lis: if i > max: max = i return f"stačiakampis, kuris turi didesnį plotą, yra {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)
Išvestis: stačiakampis, kuris turi didesnį plotą, yra 200 stačiakampis, kuris turi didesnį plotą, yra 9000 stačiakampis, kuris turi didesnį plotą, yra 100
Šiame kodo bloke matome, kad dabar argumentai yra dinamiški, galime pridėti bet kokį argumentų skaičių, kuris bus išpakuotas maxarea funkcijoje, kad gautume norimą rezultatą. Taip pat galime palyginti bet kokį plotą šiuo kontekstu.
**kwargs Python
kwargs yra panašus į args, tačiau jis priima pozicinius argumentus. Jis naudoja ** operatorių, kuris turi keletą savybių, tokių kaip kelių pozicinių argumentų išpakavimas bet kokiu ilgiu, taip pat gali išpakuoti žodynus, taip pat gali būti naudojamas dviejų žodynų sujungimui.
Žodynų sujungimas
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {**a, **b} print(type(c)) print(c) Matome iš aukščiau pateikto kodo, kad turime 2 žodynus a ir b, kurie sujungiami naudojant ** operatorių, kad gautume kitą žodyną. Išvestis: <class 'dict'> {'h': 1, 'n': 2, 'm': 5, 'l': 10}
Kai naudojame * operatorių vietoj ** operatoriaus, šio atvejo kodas iliustruotas žemiau.
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {*a, *b} print(type(c)) print(c)
Išvestis: <class 'set'> {'n', 'l', 'm', 'h'}
Taigi, kai * operatorius naudojamas dviejų žodynų sujungimui, rezultatas bus rinkinys, kuriame bus tik žodyno raktai.
maxarea funkcija naudojant **kwargs iliustruota žemiau pateiktame kodo bloke.
def maxarea(**lis): max = 0 for i in lis.values(): if i > max: max = i return f"stačiakampis, kuris turi didesnį plotą, yra {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)
Išvestis: stačiakampis, kuris turi didesnį plotą, yra 3 stačiakampis, kuris turi didesnį plotą, yra 2 stačiakampis, kuris turi didesnį plotą, yra 9
Šiame tinklaraštyje apie pažangias funkcijas Python mes aptarėme temas, tokias kaip funkcijų perdavimas kitoms funkcijoms, funkcijų naudojimas funkcijoje, *Args Python, “*” operatorius Python, **kwargs Python ir kt. Tolimesnės temos, įskaitant klases, bus aptartos kitame tinklaraščio įraše. Namų darbai, susiję su pažangiomis funkcijomis Python, pateikti žemiau.
Agnieszka Markowska-Szmaj
Python Course From Beginner to Advanced in 11 blog posts:
- Python tuple'ai, sąrašai, rinkiniai ir žodynai. 3 dalis Python kurso nuo pradedančiųjų iki pažengusiųjų 11 tinklaraščio įrašų
- Python funkcijos. 7 dalis Python kursas nuo pradedančiųjų iki pažengusiųjų per 11 tinklaraščio įrašų
- Įvadas į Python kursą. 1 dalis Python kursas nuo pradedančiojo iki pažengusiojo per 11 tinklaraščio įrašų
- Kintamieji ir duomenų tipai Python. 2 dalis Python kursas nuo pradedančiųjų iki pažengusiųjų per 11 tinklaraščio įrašų
- Python rinkiniai ir žodynai. 4 dalis Python kursas nuo pradedančiojo iki pažengusio per 11 tinklaraščio įrašų
- Python klasės ir objektai. 9 dalis Python kursas nuo pradedančiųjų iki pažengusiųjų per 11 tinklaraščio įrašų
- Failai Python. 10 dalis Python kursas nuo pradedančiojo iki pažengusio per 11 tinklaraščio įrašų
- Ciklai Python'e. 6 dalis Python kurso nuo pradedančiojo iki pažengusio per 11 tinklaraščio įrašų
- Išplėstinės funkcijos Python. 8 dalis Python kursas nuo pradedančiojo iki pažengusio per 11 tinklaraščio įrašų