Kutulutsidwa kwa chilankhulo cha pulogalamu ya Python 3.9

Pambuyo pa chaka cha chitukuko zoperekedwa kumasulidwa kwakukulu kwa chinenero cha pulogalamu Python 3.9. Python 3.9 inali yoyamba kutulutsidwa pambuyo pake kusintha ntchito pa kuzungulira kwatsopano kukonzekera ndi kuthandizira zotulutsidwa. Zotulutsa zatsopano zatsopano zidzapangidwa kamodzi pachaka, ndipo zosintha zidzatulutsidwa miyezi iwiri iliyonse. Nthambi iliyonse yofunikira idzathandizidwa kwa chaka chimodzi ndi theka, kenako zaka zina zitatu ndi theka zidzakonzedwa kuti zithetse zofooka.

Ntchito pa nthambi yatsopano tsopano ikuyamba miyezi isanu isanayambe kutulutsidwa kwa nthambi yotsatira, i.e. zikugwirizana ndi kutulutsidwa kwa Python 3.9 anayamba kuyesa kwa alpha kwa nthambi ya Python 3.10. Nthambi ya Python 3.10 idzakhala ikutulutsidwa kwa alpha kwa miyezi isanu ndi iwiri, pomwe zatsopano zidzawonjezedwa ndikukonzedwanso. Pambuyo pake, mitundu ya beta idzayesedwa kwa miyezi itatu, pomwe kuwonjezera zatsopano kudzaletsedwa ndipo chidwi chonse chidzaperekedwa pakukonza zolakwika. Miyezi iwiri yapitayi kuti amasulidwe, nthambiyi idzakhala itatsala pang'ono kumasulidwa, ndipo kukhazikika komaliza kudzachitika.

pakati anawonjezera zatsopano mu Python 3.9:

  • M'madikishonale omwe amafotokozedwa pogwiritsa ntchito kalasi ya dict yomangidwa, adawonekera kuthandizira ophatikiza oyendetsa "|" ndi "|=" zosintha, zomwe zimagwirizana ndi {**d1, **d2} ndi njira za dict.update zomwe zidakonzedweratu kuti aphatikize madikishonale.

    >>> x = {"kiyi1": "mtengo1 kuchokera ku x", "key2": "mtengo2 kuchokera ku x"}
    >>> y = {"key2": "value2 kuchokera ku y", "key3": "value3 kuchokera ku y"}

    >>> x | y
    {'kiyi1': 'mtengo1 kuchokera ku x', 'key2': 'mtengo2 kuchokera ku y', 'key3': 'mtengo3 kuchokera ku y'}

    >>> ndi | x
    {'key2': 'value2 kuchokera ku x', 'key3': 'value3 kuchokera ku y', 'key1': 'mtengo1 kuchokera ku x'}

  • Mitundu yophatikizidwa imaphatikizapo mndandanda, mawu, ndi tuple, omwe angagwiritsidwe ntchito ngati mitundu yoyambira popanda kuitanitsa kuchokera kugawo lolemba. Iwo. m'malo molemba.List, typing.Dict and typing.Tuple tsopano mutha kufotokoza
    just list, dict and tuple:

    def greet_all(mazina: list[str]) -> Palibe:
    kwa mayina mu mayina:
    sindikiza ("Moni", dzina)

  • Amaperekedwa zida zosinthika zofotokozera ntchito ndi zosintha. Kuti muphatikize mawu ofotokozera, mtundu watsopano wa Annotated wawonjezedwa ku gawo lolemba, kukulitsa mitundu yomwe ilipo ndi metadata yowonjezera yomwe ingagwiritsidwe ntchito kusanthula kosasunthika kapena kukhathamiritsa kwa nthawi yothamanga. Kuti mupeze metadata kuchokera pamakhodi, include_extras parameter yawonjezedwa kunjira ya typing.get_type_hints().

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

  • Toned pansi galamala zofunika kwa okongoletsa - mawu aliwonse oyenera kugwiritsidwa ntchito ngati ndi pamene midadada tsopano angagwiritsidwe ntchito ngati zokongoletsa. Kusinthaku kunapangitsa kuti khodi ya PyQt5 ikhale yosavuta kuwerenga ndikupangitsa kuti gawoli likhale losavuta:

    Anali:
    button_0 = mabatani[0] @button_0.clicked.connect

    Tsopano mutha kulemba:
    @mabatani[0].clicked.connect

  • Ku laibulale yokhazikika anawonjezera gawo anayankha, zomwe zimaphatikizapo zambiri kuchokera ku database ya nthawi ya IANA.

    >>> kuchokera ku zoneinfo import ZoneInfo
    >>> kuyambira nthawi yanthawi yolowetsa, timedelta
    >>> # Nthawi yachilimwe
    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
    >>> sindikiza (dt)
    2020-10-31 12:00:00-07:00

    >>> dt.tzname()
    'PDT'

    >>> # Nthawi yokhazikika
    >>> dt += timedelta(masiku=7)
    >>> sindikiza (dt)
    2020-11-07 12:00:00-08:00

    >>> sindikiza (dt.tzname())
    PST

  • Wowonjezera graphlib module, momwe zakhazikitsidwa kuthandizira kusanja kwapamwamba kwa ma graph.
  • Zaperekedwa njira zatsopano zochotsera ma prefixes ndi malekezero a mzere - str.removeprefix(prefix) ndi str.removesuffix(suffix). Njira zawonjezedwa ku str, byte, bytearray ndi collections.UserString zinthu.

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

  • Kuphatikizidwa watsopano wofotokozera msomali (Parsing Expression Grammar), yomwe idalowa m'malo mwa wofotokozera LL(1). Kugwiritsiridwa ntchito kwa parser yatsopano kunapangitsa kuti zitheke kuchotsa "ma hacks" ena omwe amagwiritsidwa ntchito podutsa zoletsa mu LL (1), ndikuchepetsa kwambiri ndalama zogwirira ntchito kuti asamalire. Pankhani ya magwiridwe antchito, wophatikiza watsopanoyo ali pamlingo wofanana ndi wam'mbuyomu, koma ali patsogolo kwambiri potengera kusinthasintha, zomwe zimakuthandizani kuti mukhale omasuka popanga zida zachilankhulo chatsopano. Khodi yakale yodziyimira isungidwa pakadali pano ndipo ikhoza kubwezedwa pogwiritsa ntchito mbendera ya "-X oldparser" kapena "PYTHONOLDPARSER=1" kusintha kwa chilengedwe, koma idzachotsedwa pakumasulidwa 3.10.
  • Zaperekedwa kuthekera kwa njira zowonjezera za C kuti zifike pamtundu wa ma modules omwe amafotokozedwa pogwiritsa ntchito tsatanetsatane wa pointer m'malo mofufuza gawo la gawoli pogwiritsa ntchito ntchito ya PyState_FindModule. Kusinthaku kumakupatsani mwayi wowonjezera magwiridwe antchito a C ma module pochepetsa kapena kuchotsa kwathunthu kuwunika kwa gawo. Kuti muphatikize gawo ndi kalasi, C-function PyType_FromModuleAndSpec() ikufunsidwa, kuti mupeze gawoli ndi dera lake, C-functions PyType_GetModule() ndi PyType_GetModuleState() akufunsidwa, ndikupereka njira yofikira kalasi. momwe zimatchulidwira, C-function PyCMethod ndi mbendera ya METH_METHOD akuperekedwa.
  • Wotolera zinyalala kuperekedwa kuchokera kuzinthu zotsekera zomwe zili ndi zinthu zojambulidwanso zomwe zimakhalabe zopezeka kunja komaliza kukatha.
  • Njira yowonjezera os.pidfd_open, yomwe imalola kuti Linux kernel subsystem "pidfd" igwiritsidwe ntchito kuthana ndi vuto logwiritsanso ntchito PID (pidfd imalumikizidwa ndi njira inayake ndipo sikusintha, pomwe PID imatha kulumikizidwa ndi njira ina pambuyo poti ndondomeko yomwe ikukhudzana ndi PIDyo itatha. ).
  • Kuthandizira kwa Unicode specifications kwasinthidwa kukhala mtundu 13.0.0.
  • Zathetsedwa kukumbukira kutayikira poyambitsanso womasulira wa Python munjira yomweyo.
  • Kuchita kwa mitundu yomangidwamo, tuple, set, frozenset, list and dict yakonzedwa bwino. zakhazikitsidwa pogwiritsa ntchito njira yachidule ya Vectorcall kuti mupeze mwachangu zinthu zolembedwa m'chinenero cha C.
  • Ma modules _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, opareta, gwero, nthawi ndi _weakref zakwezedwa kuchokera kuyambitsa mu magawo angapo.
  • The standard library modules audioop, ast, grp, _hashlib, pwd, _posixsubprocess, mwachisawawa, sankhani, struct, termios ndi zlib asinthidwa kuti agwiritse ntchito malire ABI yokhazikika, yomwe imathetsa vuto la operability ya misonkhano yowonjezera ma modules a mitundu yosiyanasiyana ya Python (pamene mukukonzanso Baibulo, palibe chifukwa chomanganso ma modules owonjezera, ndipo ma modules opangidwa kwa 3.9 adzatha kugwira ntchito mu nthambi ya 3.10).
  • Gawo la asyncio lasiya kuthandizira pa reuse_address parameter chifukwa cha zovuta zachitetezo (pogwiritsa ntchito SO_REUSEADDR ya UDP pa Linux imalola njira zosiyanasiyana zophatikizira zomvera padoko la UDP).
  • Kukhathamiritsa kwatsopano kwawonjezeredwa, mwachitsanzo, kupititsa patsogolo magwiridwe antchito azizindikiro pamapulogalamu amitundu yambiri, kuthamanga kwa gawo la subprocess m'malo a FreeBSD, komanso kugawa kwakanthawi kwakanthawi (kugawa kusinthika kwa mawu akuti "for y in [expr] ]” tsopano yachita bwino ngati mawu akuti “y = expr” "). Ambiri, mayesero ambiri chiwonetsero kuchepa kwa magwiridwe antchito poyerekeza ndi nthambi 3.8 (kuthamanga kumawonedwa kokha pamayeso a write_local and write_deque):

    Mtundu wa python 3.4 3.5 3.6 3.7 3.8 3.9
    ———————————

    Kufikira kosinthika ndi mawonekedwe:
    werengani_zako 7.1 7.1 5.4 5.1 3.9 4.0
    werengani_osakhala amderali 7.1 8.1 5.8 5.4 4.4 4.8
    werengani_padziko lonse lapansi 15.5 19.0 14.3 13.6 7.6 7.7
    kuwerenga_kumangidwa 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
    werengani_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
    werengani_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
    werengani_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
    werengani_njira yowerengera 37.6 37.9 29.6 26.9 27.7 45.9

    Kufikira kosinthika komanso kalembedwe:
    kulemba_m'deralo 8.7 9.3 5.5 5.3 4.3 4.2
    kulemba_osakhala kwawo 10.5 11.1 5.6 5.5 4.7 4.9
    kulemba_padziko lonse lapansi 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
    kulemba_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
    kulemba_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7

    Kufikira pakuwerenga kwadongosolo la data:
    werengani_mndandanda 24.2 24.5 20.8 20.8 19.0 21.1
    werengani_deque 24.7 25.5 20.2 20.6 19.8 21.6
    werengani_dict 24.3 25.7 22.3 23.0 21.0 22.5
    werengani_mlandu 22.6 24.3 19.5 21.2 18.9 21.6

    Kufikira polemba zolemba:
    kulemba_mndandanda 27.1 28.5 22.5 21.6 20.0 21.6
    kulemba_deque 28.7 30.1 22.7 21.8 23.5 23.2
    kulemba_dict 31.4 33.3 29.3 29.2 24.7 27.8
    kulemba_strdict 28.4 29.9 27.5 25.2 23.1 29.8

    Zochita zandalama (kapena pamzere):
    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

    Chidule cha nthawi:
    kuzungulira_pamutu 0.5 0.6 0.4 0.3 0.3 0.3

  • Zachotsedwa ntchito zambiri za Python 2.7 ndi njira zomwe zidasiyidwa kale ndipo zidapangitsa DeprecationWarning pakutulutsidwa koyambirira, kuphatikiza njira ya unescape() mu html.parser.HTMLParser,
    tostring() and fromstring() in array.array, isAlive() in threading.Thread, getchildren() and getiterator() in ElementTree, sys.getcheckinterval(), sys.setcheckinterval(), asyncio.Task.current_task(), asyncio.Task.all_tasks(), base64.encodestring() ndi base64.decodestring().

Source: opennet.ru

Kuwonjezera ndemanga