Programmering

Python 3.9: Hvad er nyt og bedre

Python 3.9, der blev frigivet i dag, frembringer væsentlige ændringer i både sprogets funktioner og til, hvordan sproget udvikles. Python har svampet i popularitet de sidste par år, og dets anvendelse er eksploderet i hastigt udviklende områder som datalogi og maskinindlæring. Projektet arbejder hårdt på at holde trit med alle de nye krav.

Her er en oversigt over alle de store nye funktioner i Python 3.9.

Python skifter til en årlig frigivelsescyklus

Indtil dette tidspunkt er Python blevet udviklet og frigivet på en atten måneders kadence. PEP 602 foreslog, at Python-udviklingsteamet vedtager en årlig frigivelsescyklus, og dette forslag er blevet accepteret.

En årlig udgivelsescyklus betyder færre funktioner pr. Udgivelse, men det betyder også hurtigere feedback på funktionstestning, færre potentielt brudende ændringer for hver udgivelse og dermed mere incitament for brugere og Linux-distributionsledere til at opgradere Python oftere. Det betyder også, at nye funktioner, der foreslås sent i udviklingscyklussen, ikke tager så lang tid at blive rullet ind i en ny udgivelse.

Den nye tidslinje betyder, at Python 3.9 sendes i oktober 2020. Python 3.10 startede officielt præ-alfa-udvikling den 19. maj 2020, vil gå ind i alfa-udviklingsfasen, når Python 3.9 sendes, og vil blive sendt i oktober 2021. Fremtidige Python-udgivelser følger samme mønster.

Python bliver hurtigere som standard

Hver revision af Python nyder forbedringer af ydeevnen i forhold til den tidligere version. Python 3.9 ruller ind i to store forbedringer, der øger ydeevnen uden at kræve ændringer til eksisterende kode.

Den første forbedring indebærer mere brug af vektoropkald protokol introduceret i Python 3.8. vektoropkald foretager mange almindelige funktionsopkald hurtigere ved at minimere eller eliminere midlertidige objekter oprettet til opkaldet. I Python 3.9, flere Python-indbyggede - rækkevidde, tuple, sæt, frozenset, liste, dict - brug vektoropkald internt for at fremskynde udførelsen.

Den anden store ydeevne forbedrer er mere effektiv parsing af Python kildekode. Den nye parser til CPython-runtime var ikke designet til at løse ydeevneproblemer, men snarere til at håndtere interne uoverensstemmelser i den originale parser. En vigtig frynsefordel er imidlertid hurtigere parsing, især for store mængder kode.

Flere Python-streng og ordbogfunktioner

Python gør det let at manipulere almindelige datatyper, og Python 3.9 udvider denne lethed med nye funktioner til strenge og ordbøger. For strenge er der nye metoder til at fjerne præfikser og suffikser, operationer, der længe har krævet en masse manuelt arbejde for at trække af. For ordbøger er der nu fagforeningsoperatører, en til at flette to ordbøger til en ny ordbog og en til at opdatere indholdet af en ordbog med en anden ordbog.

Dekoratører mister nogle begrænsninger

Dekoratorer lader dig pakke Python-funktioner for at ændre deres adfærd programmatisk. Tidligere kunne dekoratører kun bestå af @ -symbolet, et navn (f.eks. func) eller et stiplet navn (func.metode) og eventuelt et enkelt opkald (func.method (arg1, arg2)). Med Python 3.9 kan dekoratører nu bestå af ethvert gyldigt udtryk.

En langvarig måde at omgå denne begrænsning var at oprette en funktion eller et lambda-udtryk, der ville stå for et mere komplekst udtryk, når det blev brugt som dekoratør. Nu vil ethvert udtryk gøre, forudsat at det giver noget, der kan fungere som dekoratør.

Nye Python-type operationer

I løbet af de sidste par versioner har Python udvidet understøttelse af typetip. Dette er hovedsageligt af hensyn til linters og code checkers; typer håndhæves ikke ved kørsel i CPython, og der er ingen planer om at gøre Python til et statisk skrevet sprog. Men typehinting er et kraftfuldt værktøj til at sikre konsistens i store kodebaser, så Python-kode kan stadig have gavn af at have typetips.

To nye funktioner til typetip og typebetegnelser kom ind i Python 3.9. I det ene er typetips til indholdet af samlinger - f.eks. Lister og ordbøger - nu tilgængelige i Python. Dette betyder, at du for eksempel kan beskrive en liste som liste [int] - en liste over heltal - uden behov for at skrive bibliotek for at gøre det.

Den anden tilføjelse til Pythons typemekanismer er fleksibel funktion og variable kommentarer. Dette tillader brug af Kommenteret skriv for at beskrive en type ved hjælp af metadata, der kan undersøges på forhånd (med fnugværktøjer) eller ved kørsel. For eksempel, Annoteret [int, ctype ("char")] kunne bruges til at beskrive et heltal, der skal betragtes som en char skriv C. Som standard ville Python ikke gøre noget med en sådan kommentar, men den kunne bruges af kodelinjer.

Forbedringer af Python-interner

Oprydning, raffinering og modernisering af Pythons interner er et løbende initiativ for Pythons udviklere, og Python 3.9 har et par ændringer i den retning.

Den første er et redesign af, hvordan moduler interagerer med importmaskinerne. Python-udvidelsesmoduler, skrevet i C, kan nu bruge en ny indlæsningsmekanisme, der får dem til at opføre sig mere som almindelige Python-moduler, når de importeres. Flere moduler i Pythons standardbibliotek understøtter for nylig denne adfærd: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. Den nye indlæsningsmekanisme tillader ikke kun udvidelsesmoduler at blive håndteret mere fleksibelt af Python, men muliggør også nye funktioner såsom avanceret tilslutningsadfærd.

Det andet oprydningsinitiativ er en stabil intern ABI for CPython, en garanteret til at vare i Pythons 3. levetid. Historisk har hver større revision af Python været ABI-inkompatibel med tidligere versioner, hvilket kræver, at udvidelsesmoduler skal kompileres for hver ny version. Fra nu af fungerer alle udvidelsesmoduler, der bruger den stabile ABI, på tværs af Python-versioner. Med Python 3.9 bruger følgende moduler i standardbiblioteket det stabile ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, tilfældig, vælg, struct, termios, zlib.

Andre ændringer i Python 3.9

  • Pythons standardbibliotek understøtter nu IANA Time Zone Database. Den nævnte database er velholdt og i vid udstrækning brugt, og at have en direkte måde at bruge den i Pythons datetime-bibliotek på vil være en stor, tidsbesparende.
  • Nye strengmetoder tillader let fjernelse af præfikser og suffikser. Dette er et af de almindelige daglige brugsscenarier, der krævede lidt for meget kogeplade, end det syntes nødvendigt. Den nye .removeprefix () og .removesuffix () metoder returnerer en modificeret kopi af en streng minus det pågældende præfiks eller suffiks, forudsat at de findes i strengen.

Sådan gør du mere med Python

  • 4 Python-type brikker for at holde din kode ren
  • Python-stil: 5 værktøjer til at rydde op i din Python-kode
  • Sådan arbejder du med Python-datatypen
  • Sådan pakkes Python-apps med BeeWare Rejsetaske
  • Sådan køres Anaconda side om side med andre pythoner
  • Sådan bruges Python-dataglas
  • Kom godt i gang med async i Python
  • Sådan bruges asyncio i Python
  • 3 trin til en Python async-eftersyn
  • Sådan bruges PyInstaller til at oprette Python-eksekverbare filer
  • Cython tutorial: Sådan fremskyndes Python
  • Sådan installeres Python på den smarte måde
  • Sådan styres Python-projekter med Poetry
  • Sådan styres Python-projekter med Pipenv
  • Virtualenv og venv: Python virtuelle miljøer forklaret
  • Python virtualenv og venv do's and don'ts
  • Python-gevind og underprocesser forklaret
  • Sådan bruges Python debugger
  • Sådan bruges timeit til at profilere Python-kode
  • Sådan bruges cProfile til profilering af Python-kode
  • Sådan konverteres Python til JavaScript (og tilbage igen)