рдкрд╛рдпрдерди 3.8 рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рдпрд╣ рдкрд╛рдпрдерди 2 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ

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


рджреВрд╕рд░реА рдУрд░, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкрд╛рдпрдерди 3.8 рдХреА рд░рд┐рд▓реАрдЬ рд╣реБрдИ, рдЬрд┐рд╕рдореЗрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рд╢рдХреНрдХрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, Python 3.9 рдХреА рдЕрднреА рддрдХ рдЬрд▓реНрдж рд╣реА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред


рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдЪрд╛рдирдХ рдкрд╛рдпрдерди 2 рдХрд╛ рддреНрдпрд╛рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдмрд╕ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ: рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рддреБрд░рдВрдд 3.8 рдкрд░ рд╕рдВрдХреНрд░рдордг рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╕рдмрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред


рдЦреИрд░, рдпрд╣ рддрдп рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдпрдерди 3.8 рдХреЗ рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИ, рдЬреЛ рд╣рд░ рдкрд╛рдЗрдереЛрдирд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред


1. рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рднрд╛рд╡


рд╡рд╛рд▓рд░рд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрджрд░ рдЪрд░ рдХреЛ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡рддрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 3.8 рдХреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рдЪрд░реНрдЪрд┐рдд рд╣реИред


a = 6 #    b  a ** 2 #  ,  b > 0 if (b := a ** 2) > 0: print(f' {a}  {b}.') #  6  36. 

рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╕рднреА рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рддрд░рд╣) рдкрд╣рд▓реЗ рдЕрд╡рд╕рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЬрдм рдЙрдЪрд┐рдд рд╣реЛред


 #     a = 5 d = [b := a+1, a := b-1, a := a*2] 

2. рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рд╕рдВрдмрдВрдзреА рддрд░реНрдХ


рдХрд╛рд░реНрдп рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред


  • рд╕реНрдерд┐рддрд┐ - рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд
  • рдирд╛рдо - рдирд╛рдо рд╕реЗ рдкрд╛рд░рд┐рдд

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рдП рдФрд░ рдмреА рджреЛрдиреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд┐рддрд┐ рдФрд░ рдирд╛рдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 def my_func(a, b=1): return a+b my_func(5,2) #    my_func(a=5, b=2) #    

рдкрд╛рдпрдерди рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ / рдФрд░ * рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЗрд╡рд▓ рд╕реНрдерд┐рддреАрдп рдпрд╛ рдХреЗрд╡рд▓ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдмрд╛рдж рд╡рд╛рд▓рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╛рдпрдерди 3.8 рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛)ред


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓реЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ a рдФрд░ b рдХреЗрд╡рд▓ рд╕реНрдерд┐рддреАрдп рд╣реИрдВ, c рдФрд░ d рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд┐рдо рджреЛ e рдФрд░ f рдХрд╛ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


 def my_func(a, b, /, c, d, *, e, f): return a+b+c+d+e+f my_func(1, 2, 3, 4, 5, 6) # : e, f    my_func(a=1, b=2, 3, 4, e=5, f=6) # : a, b    my_func(1, 2, c=3, 4, e=5, f=6) # returns 21 my_unc(1, 2, c=3, d=4, e=5, f=6) # returns 21 

рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЛ рд╕реАрдорд┐рдд рдХреНрдпреЛрдВ рдХрд░реЗрдВ? рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рдФрд░ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╕рдВрдмрдВрдзреА рддрд░реНрдХреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдмрдВрдз рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рднреА рдмрдЪреЗрдВрдЧреЗред


3. рдПрдл-рд▓рд╛рдЗрдиреНрд╕ 2.0


рдпрд╣ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди 3.6 рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЧрдИ рдПрдл-рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдкрдг рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред


рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди 3.8 рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдЪрд░ рдХрд╛ рдирд╛рдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж = рдЪрд┐рд╣реНрди рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдирд╛рдо рдХреЛ рджреЛрд╣рд░рд╛рдП рдмрд┐рдирд╛ рдЙрд╕рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХрд╛ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 pi = 3 #        print(f'pi={pi}') #     print(f'{pi=}') #      

рдкреНрд░рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рдбреАрдмрдЧ рдФрд░ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ :)


4. рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░


рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдкрд░ рдлреЗрд░рдмрджрд▓ рдЕрдм рдЙрд▓рдЯ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


5. рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдирдпрд╛ importlib.metadata рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреИрдХреЗрдЬ рд╕реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕реНрдХрд░рдг) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред


6. рдЕрдВрдд рдореЗрдВ + рдЬрд╛рд░реА рд░рдЦреЗрдВ


рдкрд╣рд▓реЗ, рдЖрдк рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХреЗ рдХрд╛рд░рдг рдЕрдВрдд рдореЗрдВ рдЬрд╛рд░реА рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред рдЕрдм рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 for i in range(2): try: print(i) finally: print('.') continue print('    .') # Python <= 3.7 >> SyntaxError: 'continue' not supported inside 'finally' clause # Python 3.8 >> 0 . 1 . 

Source: https://habr.com/ru/post/hi483276/


All Articles