Ngaleupaskeun basa programming Python 3.9

Sanggeus sataun pangwangunan ditepikeun release basa programming signifikan Python 3.9. Python 3.9 éta release munggaran sanggeus transisi proyék dina siklus anyar persiapan sarta rojongan release. Kaluaran utama anyar ayeuna bakal dihasilkeun sataun sakali, sarta apdet corrective bakal dileupaskeun unggal dua bulan. Unggal cabang anu penting bakal dirojong salami hiji satengah taun, saatos tilu satengah taun deui bakal dikembangkeun pikeun ngalereskeun kerentanan.

Gawé dina cabang anyar ayeuna dimimitian lima bulan saméméh sékrési cabang salajengna, i.e. coinciding jeung sékrési Python 3.9 dimimitian nguji alfa tina Python 3.10 cabang. Cabang Python 3.10 bakal aya dina sékrési alfa salami tujuh bulan, dimana fitur-fitur énggal bakal ditambah sareng bug dibenerkeun. Sanggeus ieu, versi béta bakal diuji salila tilu bulan, salila nambahkeun fitur anyar bakal dilarang sarta sakabeh perhatian bakal dibayar ka ngalereskeun bug. Dua bulan terakhir sateuacan rilis, cabangna bakal aya dina tahap calon pelepasan, dimana stabilisasi akhir bakal dilaksanakeun.

di antara ditambahkeun inovasi dina Python 3.9:

  • Dina kamus diartikeun ngagunakeun kelas dict diwangun-di, mucunghul rojongan pikeun operator gabungan "|" jeung "|=" apdet, nu ngalengkepan métode {**d1, **d2} jeung dict.update saméméhna diusulkeun pikeun ngagabungkeun kamus.

    >>> x = {"key1": "value1 from x", "key2": "value2 from x"}
    >>> y = {"key2": "value2 from y", "key3": "value3 from y"}

    >>> x | y
    {'key1': 'value1 ti x', 'key2': 'value2 ti y', 'key3': 'value3 ti y'}

    >>> y | x
    {'key2': 'value2 ti x', 'key3': 'value3 ti y', 'key1': 'value1 ti x'}

  • Koleksi jinis anu diwangun kalebet daptar, dict, sareng tuple, anu tiasa dianggo salaku jinis dasar tanpa ngimpor tina modul ngetik. Jelema. tinimbang ngetik.Daptar, ngetik.Dict jeung ngetik.Tuple ayeuna anjeun bisa nangtukeun
    ngan daptar, dict jeung tuple:

    def greet_all (ngaran: daptar [str]) -> Euweuh:
    pikeun ngaran dina ngaran:
    print ("Halo", ngaran)

  • Disadiakeun alat fléksibel pikeun annotating fungsi jeung variabel. Pikeun ngalampirkeun annotations, hiji tipe Annotated anyar geus ditambahkeun kana modul ketikan, ngalegaan tipe aya kalawan metadata tambahan nu bisa dipaké pikeun analisis statik atawa pikeun optimizations run-time. Pikeun ngakses metadata tina kode, parameter include_extras geus ditambahkeun kana metoda typing.get_type_hints().

    charType = Annotated[int, ctype("char")] UnsignedShort = Annotated[int, struct2.ctype('H')]

  • Toned handap syarat gramatikal pikeun decorators - sagala éksprési cocog pikeun pamakéan dina lamun jeung bari blok ayeuna bisa dipaké salaku decorator a. Parobihan sacara signifikan ningkatkeun kabacaan kode PyQt5 sareng nyederhanakeun pangropéa modul ieu:

    Éta:
    button_0 = tombol[0] @button_0.clicked.connect

    Ayeuna anjeun tiasa nyerat:
    @tombol [0].clicked.connect

  • Ka perpustakaan baku ditambihan modul zonafo, nu ngawengku informasi ti database zone waktos IANA.

    >>> ti zoneinfo impor ZoneInfo
    >>> ti datetime impor datetime, timedelta
    >>> # Wanci usum panas
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> nyitak(dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Waktos baku
    >>> dt += timedelta(dinten=7)
    >>> nyitak(dt)
    2020-11-07 12:00:00-08:00

    >>> print(dt.tzname())
    PST

  • Ditambahkeun modul graphlib, dimana dilaksanakeun rojongan pikeun topological asihan grafik.
  • Diajukeun métode anyar pikeun miceun awalan jeung tungtung garis - str.removeprefix(awalan) jeung str.removesuffix (ahiran). Métode geus ditambahkeun kana str, bait, bytearray na collections.UserString objék.

    >>> s = "FooBar"
    >>> s.removeprefix("Foo")
    'Bar'

  • Aub parser anyar kaki palsu (Parsing Expression Grammar), anu ngagantikeun parser LL(1). Pamakéan parser anyar ngamungkinkeun meunang leupas tina sababaraha "hacks" dipaké pikeun bypass larangan dina LL (1), sarta nyata ngurangan biaya kuli pikeun ngajaga parser. Dina hal kinerja, parser anyar kira-kira dina tingkat anu sami sareng anu saacanna, tapi sacara signifikan sateuacanna dina hal kalenturan, anu ngamungkinkeun anjeun ngarasa langkung bébas nalika ngarancang fitur basa anyar. Kode parser heubeul dipikagaduh pikeun ayeuna sarta bisa balik ngagunakeun bandéra "-X oldparser" atawa variabel lingkungan "PYTHONOLDPARSER=1", tapi bakal dihapus dina release 3.10.
  • Disadiakeun kamampuhan pikeun métode extension C pikeun ngakses kaayaan modul nu maranéhna ditetepkeun maké dereference pointer langsung tinimbang néangan kaayaan modul ngagunakeun fungsi PyState_FindModule. Parobahan ngidinan Anjeun pikeun ngaronjatkeun kinerja modul C ku cara ngurangan atawa sagemblengna ngaleungitkeun overhead mariksa kaayaan modul. Pikeun ngahubungkeun modul jeung kelas hiji, C-fungsi PyType_FromModuleAndSpec () diajukeun, pikeun ménta modul jeung kaayaan na, C-fungsi PyType_GetModule () sarta PyType_GetModuleState () diajukeun, sarta nyadiakeun metoda kalawan aksés ka kelas. nu eta dihartikeun, C-fungsi PyCMethod jeung METH_METHOD bandéra diusulkeun.
  • Pamulung runtah dikirimkeun ti ngonci koleksi ngandung objék reanimated nu tetep externally diaksés sanggeus finalizer jalan.
  • métode ditambahkeun os.pidfd_open, anu ngamungkinkeun subsistem kernel Linux "pidfd" tiasa dianggo pikeun nanganan kaayaan pamakean deui PID (pidfd pakait sareng prosés khusus sareng henteu robih, sedengkeun PID tiasa dikaitkeun sareng prosés anu sanés saatos prosés ayeuna anu aya hubunganana sareng PID éta ditungtungan. ).
  • Rojongan pikeun spésifikasi Unicode parantos diropéa kana vérsi 13.0.0.
  • Ngaleungitkeun bocor mémori nalika reinitializing juru Python dina prosés anu sarua.
  • Kinerja rentang tipe diwangun-di, tuple, set, frozenset, daptar jeung dict geus dioptimalkeun. dilaksanakeun ngaliwatan pamakéan protokol potong kompas Vectorcall pikeun aksés leuwih gancang ka objék ditulis dina basa C.
  • Modul _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, sumberdaya, waktos sareng _weakref dimuat tina initialization dina sababaraha tahap.
  • Modul perpustakaan standar audioop, ast, grp, _hashlib, pwd, _posixsubprocess, acak, pilih, struct, termios sareng zlib parantos dirobih janten panggunaan terbatas. stabil ABI, nu solves masalah operability of majelis modul extension pikeun versi béda tina Python (lamun ngamutahirkeun versi, teu perlu ngawangun deui modul extension, sarta modul disusun pikeun 3.9 bakal tiasa dianggo dina cabang 3.10).
  • Modul asyncio parantos ngaleungitkeun dukungan pikeun parameter reuse_address kusabab masalah kaamanan poténsial (ngagunakeun SO_REUSEADDR pikeun UDP dina Linux ngamungkinkeun prosés anu béda pikeun ngagantelkeun socket déngékeun ka port UDP).
  • optimizations anyar geus ditambahkeun, contona, ningkat kinerja pawang sinyal dina aplikasi multi-threaded, ngaronjat speed modul subprocess dina lingkungan FreeBSD, sarta ngerjakeun gancang variabel samentara (assigning variabel dina ekspresi "pikeun y di [expr". ]" ayeuna jadi performant salaku "y = expr" "). Sacara umum, lolobana tés nempokeun panurunan kinerja dibandingkeun cabang 3.8 (speedup dititénan ukur dina write_local jeung write_deque tés):

    Vérsi Python 3.4 3.5 3.6 3.7 3.8 3.9
    ————— — — — — — —

    Aksés baca variabel sareng atribut:
    read_local 7.1 7.1 5.4 5.1 3.9 4.0
    read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
    baca_global 15.5 19.0 14.3 13.6 7.6 7.7
    read_built 21.1 21.6 18.5 19.0 7.5 7.7
    read_classvar_from_class 25.6 26.5 20.7 19.5 18.4 18.6
    read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
    read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
    read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9

    Aksés nulis variabel sareng atribut:
    write_local 8.7 9.3 5.5 5.3 4.3 4.2
    write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
    write_global 19.7 21.2 18.0 18.0 15.8 17.2
    write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
    write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Struktur data aksés baca:
    daptar_baca 24.2 24.5 20.8 20.8 19.0 21.1
    read_deque 24.7 25.5 20.2 20.6 19.8 21.6
    baca_dict 24.3 25.7 22.3 23.0 21.0 22.5
    baca_strdict 22.6 24.3 19.5 21.2 18.9 21.6

    Struktur data aksés nulis:
    daptar_tulis 27.1 28.5 22.5 21.6 20.0 21.6
    write_deque 28.7 30.1 22.7 21.8 23.5 23.2
    write_dict 31.4 33.3 29.3 29.2 24.7 27.8
    write_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Operasi tumpukan (atawa antrian):
    list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
    deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
    deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5

    Loop waktos:
    loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

  • Dipiceun loba Python 2.7 fungsi jeung métode anu saméméhna deprecated sarta nyababkeun DeprecationWarning dina release saméméhna, kaasup metoda unescape () dina html.parser.HTMLParser,
    tostring () sarta fromstring () dina array.array, isAlive () dina threading.Thread, getchildren () sarta getiterator () dina ElementTree, sys.getcheckinterval (), sys.setcheckinterval (), asyncio.Task.current_task (), asyncio.Task.all_tasks(), base64.encodestring() jeung base64.decodestring().

sumber: opennet.ru

Tambahkeun komentar