Programavimas

Vis dar trūksta 4 galingų „Python“ funkcijų

„Python“ yra gyva kalba - ji nuolat tobulinama, kad neatsiliktų nuo laiko. „Python“ programinės įrangos fondas ne tik papildo standartinę biblioteką ir nuorodos diegimo „CPython“, bet ir pristato naujų funkcijų ir patobulinimų pačiai kalbai.

Pvz., „Python 3.8“ pristatė naują eilės priskyrimų sintaksę („Walrus operatorius“), kuris tam tikras operacijas daro glaustesnes. Kitas naujai patvirtintas sintaksės patobulinimas - šablonų suderinimas palengvins rašyti kodą, įvertinantį vieną iš daugelio galimų atvejų. Abi šias savybes įkvėpė jų buvimas ir naudingumas kitomis kalbomis.

Jie yra tik du iš daugybės naudingų funkcijų, kurias būtų galima pridėti prie „Python“, kad kalba būtų išraiškingesnė, galingesnė, labiau pritaikyta šiuolaikiniam programavimo pasauliui. Ko dar galėtume palinkėti? Čia yra dar keturios kalbos ypatybės, kurios gali suteikti „Python“ realią vertę - dvi galbūt iš tikrųjų gausime, o dvi tikriausiai negausime.

Tikrosios konstantos

„Python“ iš tikrųjų neturi pastovios vertės sampratos. Šiandien „Python“ konstantos dažniausiai yra konvencijos dalykas. Naudojant pavadinimą, kuriame yra didžiosios raidės ir gyvatės dėklas, pvz., DO_NOT_RESTART - yra užuomina, kad kintamasis yra pastovus. Panašiaispausdinti.Pabaiga tipo anotacija pateikia užuominą į tai, kad objektas neturėtų būti modifikuojamas, tačiau tai nevykdo vykdymo metu.

Kodėl? Nes kintamumas yra giliai įsišaknijęs Python elgesyje. Kai kintamajam priskiriate vertę, pvz.,x = 3 - kuriate pavadinimą vietinėje vardų srityje,xir nukreipiant jį į sistemos objektą, kuris turi sveiko skaičiaus vertę3. „Python“ visada daro prielaidą, kad vardai yra kintantys - tai bet koks vardas galėtų nurodyti bet koks objektas. Tai reiškia, kad kiekvieną kartą, kai naudojamas vardas, „Python“ stengiasi ieškoti, į kokį objektą jis nukreipia. Šis dinamiškumas yra viena iš pagrindinių priežasčių, kodėl „Python“ veikia lėčiau nei kai kurios kitos kalbos. „Python“ dinamiškumas suteikia didelį lankstumą ir patogumą, tačiau tai kainuoja vykdymo metu.

Vienas privalumas turėti tikrąsias pastovias deklaracijas „Python“ būtų tam tikras objektų paieškų, vykdomų vykdymo metu, dažnio sumažėjimas ir tokiu būdu geresnis našumas. Jei vykdymo laikas iš anksto žino, kad duota reikšmė niekada nesikeičia, jai nereikia ieškoti savo sąsajų. Tai taip pat galėtų suteikti galimybę atlikti tolesnius trečiųjų šalių optimizavimus, pvz., Sistemas, kurios generuoja mašininį kodą iš „Python“ programų („Cython“, „Nuitka“).

Tačiau tikrosios konstantos būtų esminis pokytis ir greičiausiai atgalinis nesuderinamas pokytis. Taip pat reikėtų diskutuoti, jei konstantos atsirastų naujos sintaksės būdu, pavyzdžiui, dar nenaudojamos$ simbolis - arba kaip išplėstas esamas Python būdas deklaruoti vardus. Galiausiai iškyla didesnis filosofinis klausimas, ar tikrosios konstantos turi prasmę kalboje, kur dinamiškumas buvo didelė apeliacijos dalis.

Trumpai tariant, įmanoma, kad „Python“ išvysime tikrąsias konstantas, tačiau tai būtų didelis lūžis.

Tikras perkrovimas ir generiniai vaistai

Daugeliu kalbų galima parašyti kelias tos pačios funkcijos versijas, kad būtų galima dirbti su skirtingais įvesties tipais. Pavyzdžiui, ato_string () Funkcija gali būti skirtingai įgyvendinta konvertuojant iš sveikųjų skaičių, slankiojo kablelio skaičių ar kitų objektų, tačiau patogumo sumetimais jie turėtų tą patį pavadinimą. „Perkrovimas“ arba „bendrieji“ palengvina patikimos programinės įrangos rašymą, nes galite rašyti bendruosius procesus bendriems procesams, o ne naudoti metodą konkrečiam tipui.

„Python“ leidžia naudoti vieną funkcijos pavadinimą daugeliui, bet ne apibrėžiant kelis funkcijos egzempliorius. Nurodytoje srityje galite pavadinimą apibrėžti tik vieną kartą ir vienu metu susieti jį tik su vienu objektu, todėl vienu pavadinimu negalėsite turėti kelių vienos funkcijos versijų.

Tai, ką paprastai daro „Python“ kūrėjai, yra naudoti įmontuotus įtaisusisinstance () arbatipas () Norėdami nustatyti kintamojo, pateikto funkcijai, tipą, tada atlikite veiksmus pagal tipą. Kartais tai reiškia, kad po gaubtu siunčiama tam tikros rūšies funkcija. Tačiau dėl šio požiūrio kitiems kūrėjams sunku išplėsti jūsų funkciją, nebent jūs stengsitės ją išplėsti - pavyzdžiui, paskirstydami klasėje esančius metodus, kurie gali būti priskirti poklasiui.

PEP 3124, pažengęs 2007 m. Balandžio mėn., Pasiūlė funkcijų dekoravimo mechanizmą, nurodantį, kad jos gali būti perkrautos. Pasiūlymas buvo atidėtas, o ne visiškai atmestas - tai reiškia, kad idėja buvo iš esmės pagrįsta, tačiau laikas nebuvo tinkamas ją įgyvendinti. Vienas iš veiksnių, galinčių pagreitinti „Python“ perkrovos priėmimą - arba sukelti mintį visiškai nutraukti - yra naujai pasiūlytos modelių derinimo sistemos įgyvendinimas.

Teoriškai modelio derinimas gali būti naudojamas po gaubtu, kad būtų galima tvarkyti perkrovos išsiuntimą. Tačiau modelio derinimas taip pat galėtų būti pateiktas kaip pagrindimas ne generinių programų diegimas „Python“, nes tai jau suteikia elegantišką būdą perduoti operacijas pagal tipo parašus.

Taigi vieną dieną „Python“ gali būti tikras perkrovimas arba jo privalumus gali pakeisti kiti mechanizmai.

Uodegos rekursijos optimizavimas

Daugelis kalbos kompiliatorių naudoja uodegos rekursijos optimizavimą, kai pasivadinusios funkcijos programoje nesukuria naujų rietuvių rėmelių ir todėl rizikuoja susprogdinti rietuvę, jei jos veikia per ilgai. „Python“ to nedaro, o iš tikrųjų jo kūrėjai nuolat priešinosi tam.

Viena iš priežasčių yra ta, kad didžiąją dalį „Python“ naudoja iš vidauskartojimas geriau neirekursija - generatoriai, korutinai ir pan. Šiuo atveju tai reiškia naudoti funkciją su kilpa ir kamino struktūra vietoj rekursinio mechanizmo. Kiekvienas ciklo iškvietimas gali būti įrašytas į rietuvę, kad būtų sukurta nauja rekursija, ir iššokusi iš rietuvės, kai rekursija baigsis.

„Python“ kūrėjai yra skatinami naudoti šiuos modelius, o ne rekursiją, todėl atrodo, kad rekursijos optimizavimui nėra daug vilties. Tikimybė čia visai netikėta, nes „Python“ idiomos palaiko kitus sprendimus.

Daugiasluoksnė lambda

„Lambdas“ arba anoniminės funkcijos pavertė ją „Python“ tik po tam tikro kalbos kūrėjo Guido van Rossumo pasipriešinimo. Kadangi „Python lambdas“ egzistuoja dabar, jie yra labai suvaržyti: jie leidžia jums naudoti tik vieną išraišką (iš esmės viską, kas yra lygybės ženklo dešinėje priskyrimo operacijoje) kaip funkcijos kūną. Jei norite išsamaus sakinių bloko, tiesiog juos išskirstykite ir atlikite iš jų faktinę funkciją.

Priežastis - kalbos dizainas, kurį mato van Rossumas. Kaip van Rossumas rašė 2006 m., „Aš randubet koks sprendimas nepriimtinas, kuris išraiška viduryje įterpia įtrauka pagrįstą bloką. Kadangi manau, kad alternatyvi sakinių grupavimo sintaksė (pvz., Petnešos arba pradžios / pabaigos raktiniai žodžiai) yra vienodai nepriimtina, tai daugeliu linijų lambda paverčia neišsprendžiamu galvosūkiu “.

Kitaip tariant, problema nėra techninė, bet daugialypių lambdų sintaksės nebuvimas, papildantis esamą Python sintaksės estetiką. Tikriausiai nėra jokio būdo to padaryti, jei nereikėtų kurti specialaus atvejo, o kalbą, kuri kaupia specialius atvejus, būna nemalonu vartoti. Kol neatsiras toks vienaragis, teks tenkintis atskirai apibrėžtomis funkcijomis.

Daugialypės lambdos tikriausiai nevyksta „Python“.

Skaitykite daugiau apie „Python“:

  • „Python 3.9“: kas naujo ir geresnio
  • Geriausios naujos „Python 3.8“ funkcijos
  • Geresnis „Python“ projektų valdymas naudojant „Poetry“
  • „Virtualenv“ ir „venv“: paaiškintos „Python“ virtualios aplinkos
  • „Python virtualenv“ ir „venv do and donts“
  • Paaiškinta „Python“ sriegimas ir antriniai procesai
  • Kaip naudotis „Python“ derintuvu
  • Kaip naudoti „Timeit“, kad būtų galima nustatyti „Python“ kodą
  • Kaip naudoti „cProfile“ „Python“ kodui nustatyti
  • Pradėkite naudoti „Python“ asinchronizavimą
  • Kaip naudoti „asyncio“ Python
  • Kaip konvertuoti „Python“ į „JavaScript“ (ir dar kartą)
  • „Python 2“ EOL: kaip išgyventi „Python 2“ pabaigą
  • 12 pitonų kiekvienam programavimo poreikiui
  • 24 „Python“ bibliotekos kiekvienam „Python“ kūrėjui
  • 7 mieli „Python“ IDE, kurių galbūt praleidote
  • 3 pagrindiniai „Python“ trūkumai ir jų sprendimo būdai
  • Palyginti 13 „Python“ žiniatinklio sistemų
  • 4 „Python“ testavimo sistemos, kad sutriuškintumėte jūsų klaidas
  • 6 puikios naujos „Python“ funkcijos, kurių nenorite praleisti
  • 5 „Python“ paskirstymai, skirti įsisavinti mašininį mokymąsi
  • 8 puikios „Python“ bibliotekos, skirtos natūraliai kalbai apdoroti
  • 6 Python bibliotekos lygiagrečiam apdorojimui
  • Kas yra PyPy? Greitesnis „Python“ be skausmo
  • Kas yra „Cython“? Python C greičiu