Programmering

Python 3.9: Hva er nytt og bedre

Python 3.9, utgitt i dag, bringer frem betydelige endringer både i funksjonene til språket og i hvordan språket er utviklet. Python har soppet i popularitet de siste årene, og bruken av den har eksplodert i raskt utviklende områder som datavitenskap og maskinlæring. Prosjektet jobber hardt for å holde tritt med alle de nye kravene.

Her er en oversikt over alle de store nye funksjonene i Python 3.9.

Python bytter til en årlig utgivelsessyklus

Fram til dette punktet har Python blitt utviklet og gitt ut på en atten måneders kadens. PEP 602 foreslo at Python-utviklingsteamet skulle vedta en årlig utgivelsessyklus, og det forslaget ble godtatt.

En årlig utgivelsessyklus betyr færre funksjoner per utgivelse, men det betyr også raskere tilbakemelding på funksjonstesting, færre potensielt ødeleggende endringer for hver utgivelse, og dermed mer incitament for brukere og Linux-distribusjonsledere til å oppgradere Python oftere. Det betyr også at nye funksjoner som er foreslått sent i utviklingssyklusen, ikke tar så lang tid å bli rullet inn i en ny utgivelse.

Den nye tidslinjen betyr at Python 3.9 sendes i oktober 2020. Python 3.10 startet offisielt pre-alfa-utvikling 19. mai 2020, vil gå inn i alfa-utviklingsfasen når Python 3.9 sendes, og vil sendes i oktober 2021. Fremtidige Python-utgivelser vil følge samme mønster.

Python blir raskere som standard

Hver revisjon av Python har ytelsesforbedringer i forhold til forrige versjon. Python 3.9 ruller inn to store forbedringer som øker ytelsen uten å kreve endringer i eksisterende kode.

Den første forbedringen innebærer mer bruk av vectorcall protokoll introdusert i Python 3.8. vectorcall gjør mange vanlige funksjonsanrop raskere ved å minimere eller eliminere midlertidige objekter som er opprettet for samtalen. I Python 3.9 har flere Python-innebygde - rekkevidde, tuple, sett, frozenset, liste, dikt - bruk vectorcall internt for å få fart på utførelsen.

Den andre store ytelsesforbedringen er mer effektiv parsing av Python-kildekoden. Den nye parseren for CPython-kjøretiden var ikke designet for å løse ytelsesproblemer, men snarere for å håndtere interne uoverensstemmelser i den opprinnelige parseren. En viktig fordel er imidlertid raskere parsing, spesielt for store volumer kode.

Flere Python-strenger og ordbokfunksjoner

Python gjør det enkelt å manipulere vanlige datatyper, og Python 3.9 utvider denne lettheten med nye funksjoner for strenger og ordbøker. For strenger er det nye metoder for å fjerne prefikser og suffikser, operasjoner som lenge har krevd mye manuelt arbeid for å trekke av. For ordbøker er det nå fagforeningsoperatører, en for å slå sammen to ordbøker til en ny ordbok og en for å oppdatere innholdet i en ordbok med en annen ordbok.

Dekoratører mister noen begrensninger

Dekoratører lar deg pakke inn Python-funksjoner for å endre deres oppførsel programmatisk. Tidligere kunne dekoratører bare bestå av @ -symbolet, et navn (f.eks. func) eller et stiplet navn (func.metode) og eventuelt en enkelt samtale (func.method (arg1, arg2)). Med Python 3.9 kan dekoratører nå bestå av et hvilket som helst gyldig uttrykk.

En langvarig måte å komme seg rundt denne begrensningen var å lage en funksjon eller lambdauttrykk som ville stå for et mer komplekst uttrykk når det ble brukt som dekoratør. Nå vil ethvert uttrykk gjøre, forutsatt at det gir noe som kan fungere som dekoratør.

Nye Python-type operasjoner

I løpet av de siste versjonene har Python utvidet støtten for typetips. Dette er hovedsakelig av hensyn til linters og code checkers; typer håndheves ikke på kjøretid i CPython, og det er ingen planer om å gjøre Python til et statisk skrevet språk. Men typetips er et kraftig verktøy for å sikre konsistens i store kodebaser, slik at Python-kode fortsatt kan ha nytte av å ha typetips.

To nye funksjoner for typehinting og typekommentarer kom seg inn i Python 3.9. I ett er typetips for innholdet i samlinger - f.eks. Lister og ordbøker - nå tilgjengelig i Python. Dette betyr at du for eksempel kan beskrive en liste som liste [int] - en liste over heltall - uten at du trenger å skrive biblioteket for å gjøre det.

Det andre tilskuddet til Pythons typemekanismer er fleksibel funksjon og variable kommentarer. Dette tillater bruk av Kommentert skriv for å beskrive en type ved hjelp av metadata som kan undersøkes på forhånd (med linting-verktøy) eller ved kjøretid. For eksempel, Kommentert [int, ctype ("char")] kan brukes til å beskrive et heltall som skal betraktes som et røye skriv inn C. Som standard ville Python ikke gjøre noe med en slik kommentar, men den kan brukes av kodelinjer.

Forbedringer av Python internals

Å rydde opp, foredle og modernisere Pythons interner er et kontinuerlig initiativ for Pythons utviklere, og Python 3.9 har et par endringer i den retning.

Den første er en redesign av måten moduler samhandler med importmaskineriet. Python-utvidelsesmoduler, skrevet i C, kan nå bruke en ny lastemekanisme som får dem til å oppføre seg mer som vanlige Python-moduler når de importeres. Flere moduler i Pythons standardbibliotek støtter nylig denne oppførselen: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. Den nye lastemekanismen tillater ikke bare utvidelsesmoduler å bli håndtert mer fleksibelt av Python, men gjør det også mulig for nye funksjoner som avansert tilkoblingsadferd.

Det andre oppryddingsinitiativet er en stabil intern ABI for CPython, en som garantert varer i hele Pythons livstid. Historisk har hver større revisjon av Python vært ABI-inkompatibel med tidligere versjoner, og krever at utvidelsesmoduler skal kompileres for hver nye versjon. Fra nå av vil alle utvidelsesmoduler som bruker den stabile ABI, fungere på tvers av Python-versjoner. Med Python 3.9 bruker følgende moduler i standardbiblioteket den stabile ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib.

Andre endringer i Python 3.9

  • Pythons standardbibliotek støtter nå IANA Time Zone Database. Nevnte database er godt vedlikeholdt og mye brukt, og å ha en direkte måte å bruke den i Pythons datetime-bibliotek vil være en stor, tidsbesparende.
  • Nye strengmetoder gjør det enkelt å fjerne prefikser og suffikser. Dette er en av de vanlige, hverdagslige bruksscenariene som krevde litt for mye kokeplate enn det som syntes nødvendig. Den nye .removeprefix () og .removesuffix () metoder returnerer en modifisert kopi av en streng minus prefikset eller suffikset i spørsmålet, forutsatt at de finnes i strengen.

Hvordan gjøre mer med Python

  • 4 Python-type brikker for å holde koden ren
  • Python-stil: 5 verktøy for å rydde opp i Python-koden
  • Hvordan jobbe med Python-datatypen
  • Hvordan pakke Python-apper med BeeWare koffert
  • Hvordan kjøre Anaconda side om side med andre pythoner
  • Hvordan bruke Python dataklasser
  • Kom i gang med asynkronisering i Python
  • Hvordan bruke asyncio i Python
  • 3 trinn til en Python async-overhaling
  • Hvordan bruke PyInstaller for å lage Python-kjørbare filer
  • Cython tutorial: Hvordan øke hastigheten på Python
  • Slik installerer du Python på den smarte måten
  • Hvordan håndtere Python-prosjekter med poesi
  • Hvordan administrere Python-prosjekter med Pipenv
  • Virtualenv og venv: Python virtuelle miljøer forklart
  • Python virtualenv og venv do’s and don'ts
  • Python-tråder og underprosesser forklart
  • Hvordan bruke Python-feilsøkingsprogrammet
  • Hvordan bruke timeit til å profilere Python-kode
  • Hvordan bruke cProfile for å profilere Python-kode
  • Slik konverterer du Python til JavaScript (og tilbake igjen)
$config[zx-auto] not found$config[zx-overlay] not found