рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ Python 3.9 рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд

рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рдЕрдХреНрдЯреВрдмрд░ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдХреНрдпрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рд▓реАрдЬ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк, рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╛рдж рджрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 2.7 рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рддреЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╣рдЯрд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИрдВ рдФрд░ рдбрд┐рдкреНрд░реЗрд╕реЗрд╢рди рд╡рд░реНрдирд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рдЪреЗрддрд╛рд╡рдиреА рдЕрднреА рднреА 3.9 рдкрд░ рд░рд╣реЗрдЧреА, рд▓реЗрдХрд┐рди рдЙрдирд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рд╢рдмреНрджрдХреЛрд╢
рдорд░реНрдЬ рдСрдкрд░реЗрдЯрд░ ( PEP-584 ) рдЕрдм рддрдХ, рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдорд╛рдореВрд▓реА рдЦрд╛рдорд┐рдпрд╛рдВ рдпрд╛ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдереАрдВред
рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ
1. update
d1 = {'one': 1}
d2 = {'two': 2}
#     ,..
d1.update(d2)
# ...  . 
united_dict = d1.copy()
united_dict.update(d2)

2.
united_dict = {**d1, **d2}

, , , .
3. dict(d1, **d2), . , d2 .
4. collections.ChainMap
.
, , .
from collections import ChainMap
d1 = {'one': 1}
d2 = {'two': 2}
united_dict = ChainMap(d1, d2)

, , , . , - .

рдЕрдм рдЖрдк рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
united_dict = d1 | d2
# ,        ,    update():
d1 |= d2

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдПрдХ рдирдИ рд╕рдВрднрд╛рд╡рдирд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХрдИ рдХреЗ рд▓рд┐рдП рдЕрдкреАрд▓ рдХрд░реЗрдВрдЧреЗред

рдХрдВрдЯреЗрдирд░реЛрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ ( PEP-0585 )
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╡рд╛рдЪрд╛рд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕реВрдЪреА рдФрд░ рддрд╛рдирд╛рд╢рд╛рд╣реА, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдорд╛рдирдХреАрдХреГрдд рдкреНрд░рдХрд╛рд░ред

рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреЗрдиреЗрд░рд┐рдХ рд╢рдмреНрдж рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдирд╛рд╢рд╛рд╣реАред рдФрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпрд╣ рджрд╛рдВрдд рди рддреЛрдбрд╝реЗрдВред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЬреЗрдиреЗрд░рд┐рдХ" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдЗрд╕рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред рд╢рд╛рдпрдж рдЕрдиреБрд╡рд╛рджреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рдирд╛рдо рдерд╛?
рдкрд░рд┐рдорд╛рдгрдмрджреНрдз рдЬреЗрдиреЗрд░рд┐рдХ: рддрд╛рдирд╛рд╢рд╛рд╣реА [str, int]ред

рддреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЕрдм рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
# 
from typing import List
List[str]
# 
list[int]

.

:
# 
from typing import OrderedDict
OrderedDict[str, int]
# 
from collections import OrderedDict
OrderedDict[str, int]

tuple # typing.Tuple
list # typing.List
dict # typing.Dict
set # typing.Set
frozenset # typing.FrozenSet
type # typing.Type
collections.deque
collections.defaultdict
collections.OrderedDict
collections.Counter
collections.ChainMap
collections.abc.Awaitable
collections.abc.Coroutine
collections.abc.AsyncIterable
collections.abc.AsyncIterator
collections.abc.AsyncGenerator
collections.abc.Iterable
collections.abc.Iterator
collections.abc.Generator
collections.abc.Reversible
collections.abc.Container
collections.abc.Collection
collections.abc.Callable
collections.abc.Set # typing.AbstractSet
collections.abc.MutableSet
collections.abc.Mapping
collections.abc.MutableMapping
collections.abc.Sequence
collections.abc.MutableSequence
collections.abc.ByteString
collections.abc.MappingView
collections.abc.KeysView
collections.abc.ItemsView
collections.abc.ValuesView
contextlib.AbstractContextManager # typing.ContextManager
contextlib.AbstractAsyncContextManager # typing.AsyncContextManager
re.Pattern # typing.Pattern, typing.re.Pattern
re.Match # typing.Match, typing.re.Match


рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП, рд░рд┐рдореВрд╡рд░рдлрд╝рд┐рдХреНрд╕рд┐рдХреНрд╕ () рдФрд░ рд░рд┐рдорд╕рдлрд╝рд┐рдХреНрд╕ () ( рдкреАрдИрдкреА 616 ) рддрд░реАрдХреЗ рджрд┐рдЦрд╛рдИ рджрд┐рдП
ред рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рд░реЗрдЦрд╛ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ рд░реЗрдЦрд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЙрдкрд╕рд░реНрдЧ рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реА рддрд░рд╣ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕рд╛рде:
some_str = 'prefix of some string and here suffix'
some_str.removeprefix('prefix')
>> ' of some string and here suffix'
some_str.removesuffix('suffix')
>> 'prefix of some string and here '

рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд▓реНрдк
1. , , тАФ removeprefix.
def removeprefix(self: str, prefix: str, /) -> str:
    if self.startswith(prefix):
        return self[len(prefix):]
    else:
        return self[:]

2. lstrip, rstrip:
	'foobar'.lstrip(('foo',))

, , .

рдЧрдгрд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдЕрдм рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЬрдХ
рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП math.gcd () рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рднрд╛рдЬрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред Math.lcm ()
рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рд╛рдорд╛рдиреНрдп рдмрд╣реБ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ , рдЬреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдХрд╛рд░реНрдп рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред math.nextafter (x, y) - y рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ x рдХреЗ рдирд┐рдХрдЯрддрдо рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред math.ulp (x)


- "рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдореЗрдВ рдЗрдХрд╛рдИ" рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХреА рд╕рдЯреАрдХрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдирд┐рдореНрдирддрдо рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдЬрдм рдЗрд╕реЗ x + ulp (x) рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдХрдЯрддрдо рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирдВрдмрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
import math

math.gcd(24, 36)
>> 12
math.lcm(12, 18)
>> 36
math.nextafter(3, -1)
>> 2.9999999999999996
3 - math.ulp(3)
>> 2.9999999999999996
math.nextafter(3, -1) + math.ulp(3)
>> 3.0 

рдЕрдм рдХреЛрдИ рднреА рд╡реИрдз рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ ( PEP-0614 ) рд╣реЛ рд╕рдХрддреА рд╣реИ
, рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рдирд╛рдо рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдбреЙрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкреЗрдк рдХрд╛ рд╡рд░реНрдгрди рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдирд╡рд╛рдЪрд╛рд░ рдХреЛрдб рдХреЛ рдкрддрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рд╣рдо рдЙрджреНрдзреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рд░рд▓реАрдХреГрдд рдФрд░ рдХреГрддреНрд░рд┐рдо рдЙрджрд╛рд╣рд░рдг:
def a(func):
	def wrapper():
		print('a')
		func()
	return wrapper
	
def b(func):
	def wrapper():
		print('b')
		func()
	return wrapper
	
decorators = [a, b]

@decorators[0] #   3.8        
def some_func():
	print('original')
	
some_func()
>> a
>> original

рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐ ( bpo-38870 ) рдХреЛ рдЦрдЧреЛрд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ ред
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ ast.AST рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░, рдореИрдВ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдерд╛ рдХрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдереАред
рдЙрджрд╛рд╣рд░рдг:
import ast
parsed = ast.parse('import pprint; pprint.pprint({"one":1, "two":2})')
unparsed_str = ast.unparse(parsed)
print(unparsed_str)
>> import pprint
>> pprint.pprint({'one': 1, 'two': 2})
exec(unparsed_str)
>> {'one': 1, 'two': 2}

рдирдИ рдПрд╕рд╛рдЗрдиреЛрдХреЛрд▓рд╕ред рдЯреЙрдкреЛрд▓реЙрдЬрд┐рдХрд▓рд╕реЛрд░реНрдЯрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╕рд╛рдЗрдХреЛрд▓реЙрдЬрд┐рдХрд▓ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдСрдл рдПрд╕рд╛рдЗрдХреНрд▓рд┐рдХ рдЧреНрд░рд╛рдлреНрд╕ ( рдмреАрдкреАрдУ -17005 ) рдЬреЛ
рдЧреНрд░рд╛рдл рд╕реЙрд░реНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдХреАрдЬ рдЧреНрд░рд╛рдл рдХреЗ рд╡рд░реНрдЯрд┐рдХрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╡реИрд▓реНрдпреВ рдкреВрд░реНрд╡рд╡рд░реНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ iterable рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ (рд╡рд░реНрдЯрд┐рдХрд▓ рдЬрд┐рд╕рдХрд╛ рдХреАрд░реНрд╕ рдкреЙрдЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ)ред рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХреЛрдИ рд╣реИрд╢реЗрдб рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
:

from functools import TopologicalSorter
graph = graph = {8: [3, 7], 11: [5, 7], 2: [11], 9: [8, 11], 10: [3, 11]}
t_sorter = TopologicalSorter(graph)
t_sorted_list = list(t_sorted_list.static_order()) #  ,    ,     static_order.
>> [3, 7, 5, 8, 11, 2, 9, 10]


, TopologicalSorter add. , , .

рдирдП рд╕реНрдЯреЗрдЯрд╕ рдЬреЛ рд╣рдо рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ,
рдЙрдиреНрд╣реЗрдВ http.HTTPStatus рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ: 103 EARLY_HINTS
418 IM_A_TEAPOT
425 TOO_EARLY

рдФрд░ рдХреБрдЫ рдФрд░ рдмрджрд▓рд╛рд╡:
  • рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ (рд░реЗрдВрдЬ, рдЯрдкрд▓, рд╕реЗрдЯ, рдлреНрд░реЛрдЬрд╝реЗрдиреНрд╕реЗрдЯ, рд╕реВрдЪреА) рддреНрд╡рд░рд┐рдд ( PEP-590 ) рд╣реИрдВ
  • "" .replace ("", s, n) рдЕрдм рд╕рднреА рдиреЙрдирдЬрд░реЛ n рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдмрд╛рдпрдЯреЗрд░рд┐рдпрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред
  • ipaddress рдЕрдм рдЧрдВрддрд╡реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ IPv6 рдкрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 3.9 рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдмрджрд▓рд╛рд╡ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ, рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЖрдк рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
docs.python.org/3.9/whatsnew/3.9.html
www.python.org/downloads/release/python-390a6
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреНрдпрд╛ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдмрд┐рдВрджреБ рд╣реИрдВред рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрдпрд╛ рд▓рдЧрд╛?

UPD:
рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рд▓рд┐рдВрдХ;
PEP-0585 рдЬреЛрдбрд╝рд╛ рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

All Articles