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.

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:

Actualizari Python 39 explicate cu exemple de coduri practice

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

1611197827 36 Actualizari Python 39 explicate cu exemple de coduri practice

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ă.

1611197828 752 Actualizari Python 39 explicate cu exemple de coduri practice

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)

1611197828 544 Actualizari Python 39 explicate cu exemple de coduri practice

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}

1611197828 493 Actualizari Python 39 explicate cu exemple de coduri practice
  • O altă metodă este dict.update care modifică dicționarul original în loc:
1611197829 185 Actualizari Python 39 explicate cu exemple de coduri practice

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

1611197829 202 Actualizari Python 39 explicate cu exemple de coduri practice

Dictele originale conservate:

1611197829 265 Actualizari Python 39 explicate cu exemple de coduri practice

python |= python3
python

1611197830 541 Actualizari Python 39 explicate cu exemple de coduri practice

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)

1611197830 790 Actualizari Python 39 explicate cu exemple de coduri practice

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")

1611197830 197 Actualizari Python 39 explicate cu exemple de coduri practice

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"))

1611197831 438 Actualizari Python 39 explicate cu exemple de coduri practice

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")

1611197831 783 Actualizari Python 39 explicate cu exemple de coduri practice

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 ")

1611197832 978 Actualizari Python 39 explicate cu exemple de coduri practice

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ă:

1611197832 180 Actualizari Python 39 explicate cu exemple de coduri practice
  • 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:

Simțiți-vă liber să vă conectați cu mine pe Stare de nervozitate sau LinkedIn.