July 29, 2020

Python 3.9 да пайдо бўладиган ажойиб фичалар

Python 3.9 ҳозирги вақтда бета-фазанинг 4-итерациясида. Aйрим нарсалар ўзгариши мумкин, лекин ҳозир барчаси аниқ бўлди.

python

Умумий типдаги аннотациялар (кичик изохлар)

Умумий изоҳлар, AКA PEP 5.8.5 ни питончилар орзу қилишган эди. Энди сиз кутубхона ишлатмасдан туриб, лист ва унинг элемент турини аниқлашингиз мумкин мумкин:

def do_stuff(data: list[int]): pass

Ҳозирда умумлаштирилган баъзи тўпламлар:

  • tuple
  • list
  • dict
  • set
  • frozenset
  • type
  • collections.deque
  • collections.abc.Coroutine
  • re.Pattern

Dict Union оператори

Python 3.9 гача стандарт курсатиш куйидагича эди:

1..upadte() методи: a.update(b)

2. Ажратиш(саралаш) оператори: {*a, *b}

Хўш, бизда бошқаси хам бор. | оператори нима қилиши кераклигини аниқ бажаради: Икки диктаталар бирлаштирилади:

a = {'cars': 5, 'phones': 2} b = {'cows': 10, 'lizards': 3} a | b // {'cars': 5, 'phones': 2, 'cows': 10, 'lizards': 3}

.update ёки spread оператори сингари, агар диктатада такрорий калитлар бўлса, бу маълумотлар йўқолишига олиб келиши мумкин. Бундан ташқари, ушбу оператор кийинрок топшириклар билан бир хил даражада ишлайди:

a = {'cars': 5, 'phones': 2} b = {'cows': 10, 'lizards': 3} a |= b print(a) // {'cars': 5, 'phones': 2, 'cows': 10, 'lizards': 3}

Қўшимчаларни ва префиксларни олиб ташлаш

Янги .removesuffix() ва .removeprefix() стринг методлари:

'SubaruImpreza`.removeprefix('Subaru') // 'Impreza' 'SubaruImpreza'.removesuffix('Impreza') // 'Subaru'

Янги парсер

Python 3.9 да янги парсер ишлатилади. У PEG га асосланган бўлиб, эски LL дан анча яхши. LL анча вақт олдин эскирганди, шунинг учун ҳам янги парсер ишлаб чиқилди. Aгар сиз эски парсер билан ишламоқчи бўлсангиз, ўзгарувчини эълон қилишингиз мумкин: PYTHONOLDPARSER=1.

Zoneinfo модули

Питон 3.9-да zoneinofo номли янги модул тақдим этилди. ZoneInfo модули IANA вақт зонасини қўллаб-қувватлайди:

from zoneinfo import ZoneInfo from datetime import datetime, timedelta timestamp = datetime(2020, 7, 15, 11, tzinfo=ZoneInfo("America/Los_Angeles"))

Graphlib модули

Яна бир янги модул - жадваллар билан ишлаш учун. Ҳозирги вақтда у фақат йўналтирилган аиклик графиклар учун топологик саралаш алгоритмини амалга оширмоқда. Aгар сиз ҳозиргина ёзган нарсаларимни тушунмасангиз, унда сизга янги модул керак бўлмайди. Графика назарияси билан таниш бўлганлар учун ушбу модул қуйидагича ишлатилиши керак (Питон документациясидан олдим):

>>> graph = {"D": {"B", "C"}, "C": {"A"}, "B": {"A"}} >>> ts = TopologicalSorter(graph) >>> tuple(ts.static_order()) ('A', 'C', 'B', 'D')


Бу илонча ҳар доим ўз янгиликлари билан хурсанд қилади. Жаноб питонистлар, мақола ёққан бўлса, каналимизга обуна бўлиб қўйинг ;)

@progerlive