Ultima versiune stabilă de Python a ieșit!
Entuziaștii open-source din întreaga lume au lucrat la funcții noi, îmbunătățite și depreciate în Python în ultimul an.
Deși versiunile beta au fost lansate de ceva timp, lansarea oficială a Python 3.9.0 a avut loc 5 octombrie 2020.
#Piton 3.9 este acum disponibil oficial! Adu-o aici:https://t.co/qVhXvbdhhh
Lansat la timp, la buget, funcții și optimizări extraordinare, un milion de utilizări casnice! Ușor cea mai bună versiune a noastră!
Adică până la 3.10 anul viitor. Dar te duci să colerezi noul RM @pyblogsal pentru asta!
– Łukasz Langa (@llanga) 5 octombrie 2020
Documentația oficială conține toate detaliile celor mai recente caracteristici și jurnal de schimbări. De-a lungul acestei postări, vă voi prezenta câteva caracteristici interesante care vă pot fi de folos în sarcinile de programare de zi cu zi.
Vom verifica următoarele:
- Tastați indicii generice și funcții flexibile și adnotări variabile
- Operatori sindicali în dicționare
-
zoneinfo
– Accesarea și calcularea fusurilor orare - Metode de șir pentru a elimina prefixele și sufixele
- Alte noutăți ale lansării
Pentru a urmări împreună cu mine sau pentru a încerca noile caracteristici, ar trebui să aveți instalat Python 3.9.
Am folosit un manager de mediu numit pyenv (alternativ, puteți utiliza conda) pentru a instala cea mai recentă versiune alături de versiunea mea actuală. De asemenea, îl puteți rula folosind imagine oficială de andocare.
Funcții flexibile și adnotări variabile
Adnotările de funcții au apărut de la Python 3.0 și ne permit să adăugăm metadate funcțiilor Python. Deci, ce este nou în Python 3.9?
S-a adăugat Python 3.9 PEP 593. A introdus un mecanism de extindere a adnotărilor de tip PEP 484 care oferă semantica standard pentru adnotări și a sugerat ca adnotările să fie utilizate pentru sugestii de tip.
Acum, pot exista multe alte cazuri de utilizare pentru adnotări în afară de sugestii de tip. Deci PEP 593 a introdus typing.Annotated
ceea ce vă permite să adăugați mai multe detalii la metadate.
Să încercăm să înțelegem mai bine acest lucru printr-un exemplu atât pentru Python 3.8, cât și pentru 3.9.
Python 3.8
def currency_exchange(eur: "euros", rate: "exchange rate") -> "euro to USD":
"""Converting Euros to USD using the exchange rate"""
return eur * rate
Aceasta este o funcție simplă care convertește euro în USD folosind cursul de schimb. Am folosit adnotările pentru a servi drept documentație pentru utilizator.
Python 3.9
from typing import Annotated
def currency_exchange(eur: Annotated[float, "euros"], rate: Annotated[float, "exchange rate"]) -> Annotated[float, "euro to dollars"]:
"""Converting Euros to Dollars using the exchange rate"""
return eur * rate
Aici, folosim nou-introdus Annotated
care ia cel puțin două argumente. Primul argument (float
în exemplu) stabilește tipul indiciu, iar restul argumentelor sunt metadate arbitrare ale funcției.
Utilizatorul / dezvoltatorul poate verifica, de asemenea, aceste adnotări folosind __annotations__
atribut:

De asemenea, putem verifica tipul folosind get_type_hint()
funcţie:

Tastați Hinting Generics în colecțiile standard
Tipuri de date de bază cum ar fi int
, str
sau bool
sunt simplu de adnotat.
Tastarea statică anterioară a fost construită incremental deasupra runtime-ului Python existent și constrânsă de acesta. Acest lucru a dus la o ierarhie de colecție duplicată în modulul de tastare datorită genericelor – adică le-am avut pe amândouă typing.List
și lista încorporată.

Cu generice, avem problema parametrizării datorită structurii lor de stocare (care este un container). Și din aceste motive, nu am putut folosi list(float)
sau list[float]
după cum indică tipul direct. În schimb, aveam nevoie de un modul de tastare pentru a realiza acest lucru.
În Python 3.9, această ierarhie duplicat nu mai este necesară. Le putem adnota direct:
scores: list(float)

Cum să îmbinați și să actualizați dicționarele
Două dintre cele mai tari și mai utile caracteristici ale Python 3.9 sunt operatorii de îmbinare (|) și actualizare (| =) adăugați la dispozitivul încorporat dict
clasă.
Modalitățile existente (3.8) de fuzionare a două tranșe au multe neajunsuri:
Python 3.8
- Despachetarea Dict arată urât și nu este ușor de descoperit.
python = {2000: "2.0.1", 2008: "2.6.9", 2010: "2.7.18"}
python3 = {2008: "3.0.1", 2009: "3.1.5", 2016: "3.6.12", 2020: "3.9.0"}
##merging two dictionaries
{**python, **python3}

- O altă metodă este dict.update care modifică dicționarul original în loc:

Python 3.9
PEP 584 a introdus doi noi operatori pentru dicționare:
- (|) uniune – să fuzioneze două dicționare. Păstrează dicționarele originale.
- (| =) actualizare – aceasta este pentru fuzionarea pe loc a dicționarelor.
python = {2000: "2.0.1", 2008: "2.6.9", 2010: "2.7.18"}
python3 = {2008: "3.0.1", 2009: "3.1.5", 2016: "3.6.12", 2020: "3.9.0"}
##merging two dictionaries
python | python3

Dictele originale conservate:

python |= python3
python

Operatorul de actualizare fuzionează dicționarele și actualizează dicționarul din stânga operatorului în timp ce păstrând ultimele valori pentru tastele care se suprapun în cele două dicte.
Cum să lucrați cu fusuri orare – ZoneInfo
Datele și timpul joacă un rol central în multe aplicații. Python oferă suport complet prin intermediul datetime
modul în biblioteca standard. Dar a existat întotdeauna un decalaj în ceea ce privește integrarea fusurilor orare la aceste marcaje de timp.
Până acum, am avut biblioteci terțe, precum datautil, pentru a implementa astfel de reguli specifice fusului orar.
Dar acum Python 3.9 a adăugat un nou zoneinfo
modul care vă permite să accesați și să utilizați întreaga bază de date de fus orar pentru Internet Assigned Numbers Authority (IANA).
Python 3.8
Până acum, am accesat marcaje de timp conștiente de fusul orar folosind tzinfo
argumentează după cum urmează:
from datetime import datetime, timezone
datetime.now(tz=timezone.utc)

Python 3.9
Dar odată cu adăugarea zoneinfo, avem acum acces la Baza de date a fusului orar IANA.
from zoneinfo import ZoneInfo
ZoneInfo("Asia/Kolkata")

Putem face o grămadă de operațiuni cu fusuri orare, iar interconversia a devenit foarte ușoară:
from datetime import datetime
from zoneinfo import ZoneInfo
post_date = datetime(2020, 10, 10, 18, 10, tzinfo=ZoneInfo("America/Vancouver"))
post_date.astimezone(ZoneInfo("Asia/Kolkata"))

Metode de șir pentru a elimina prefixele și sufixele
PEP 616 a introdus noi metode pentru a elimina prefixele și sufixele din șiruri. Noile metode sunt:
- removeprefix ()
- elimină sufixul ()
Au fost raportate multe probleme recurente pe toate forumurile majore (cum ar fi StackOverflow) din jurul lstrip()
și rstrip()
metode.
Python 3.8
Am eliminat caracterele de la ambele capete ale șirului folosind metoda strip () după cum urmează:
"Python 3.9 is out".strip(" Python")

Acest lucru a eliminat șirul prezent la capetele șirului. Dacă priviți cu atenție, acest lucru a eliminat caracterele individuale din „python”, adică „”, „p”, „y”, „t”, „h”, „o” și „n”.
Python 3.9
Pentru a scăpa de prefixul dintr-un șir, avem acum removeprefix()
:
"Python 3.9 is out".removeprefix("Python ")

Puteți verifica acest lucru cu o serie de alte permutări și combinații cu removesuffix()
metoda de asemenea.
Alte momente importante ale lansării
Pe lângă acestea, au fost introduse și o serie de alte caracteristici. Iată lista împreună cu ID-urile PEP:
- PEP 617, CPython folosește acum un nou parser bazat pe PEG – Python are acum un nou parser alături de vechiul parser LL (1). Puteți alege să rulați programul utilizând oricare dintre analizoare folosind comanda:
python -X oldparser script_name.py
Analizatorii PEG sunt mai robusti și mai puternici conform cercetărilor lui Guido van Rossum (el este creatorul Python). Scopul analizorului PEG ar fi acela de a produce același lucru arborele de sintaxă abstract (AST) ca vechi analizor LL (1).
-
Inițializare multifazică este acum disponibil pentru utilizare în mai multe module python (
audioop
,_bz2
,_codecs
,_contextvars
,_crypt
,_functools
,_json
,_locale
,math
,operator
,resource
,time
,_weakref
)
Iată un exemplu de calcul al GCD / LCM a mai mult de două numere utilizând biblioteca matematică:

- PEP 602 CPython adoptă acum un nou ciclu de lansare anual – Vor fi mai compatibili cu lansările lor și vor primi noi versiuni în fiecare octombrie.
- PEP 614, restricții gramaticale relaxate pentru decoratori – o sintaxă mai flexibilă este acum disponibilă pentru persoanele care lucrează pe cadre GUI precum PyQT. Aceasta renunță la limitarea decoratorilor constând dintr-un nume punctat. Mai multe detalii pot fi citite aici.
Pentru a afla mai multe despre detaliile fiecăreia dintre aceste caracteristici, accesați oficial documentație.
Concluzie
3.9.0 marchează o etapă importantă în călătoria dezvoltării Python și pentru comunitate. Noile îmbunătățiri sunt adăugate pe măsură ce vorbim și 3.10 va avea, de asemenea, caracteristici promițătoare.
Deocamdată, ar trebui să le încercați în curând pentru a fi utilizate pe scară largă caracteristici introduse în Python 3.9.
Încercați să rulați programele existente folosind Python 3.9 și vedeți dacă actualizarea ar merita pentru dvs.
De asemenea, ar trebui să încercați noul analizator, care pretinde că este promițător. Dar vom ști sigur numai după teste considerabile în mai multe cazuri de utilizare.
Știința datelor cu Harshit
Cu acest canal, intenționez să lansez câteva serie care acoperă întregul spațiu al științei datelor. Iată de ce ar trebui să vă abonați la canal:
- Aceste serii ar acoperi toate tutorialele de calitate cerute / solicitate pe fiecare dintre subiecte și subteme precum Fundamentele Python pentru știința datelor.
- Lămurit Matematică și derivări de ce facem ceea ce facem în ML și Deep Learning.
- Podcast-uri cu oameni de știință și ingineri de date la Google, Microsoft, Amazon etc. și directorii executivi ai marilor companii bazate pe date.
- Proiecte și instrucțiuni pentru a implementa subiectele învățate până acum. Aflați despre noile certificări, Bootcamp și resurse pentru a sparge aceste certificări de genul acesta TensorFlow Developer Certificate Exam by Google.
Simțiți-vă liber să vă conectați cu mine pe Stare de nervozitate sau LinkedIn.