@Pythonetc рд╕рд┐рддрдВрдмрд░ 2018


рдпрд╣ рдореЗрд░реА @pythonetc рдлреАрдб рд╕реЗ рдкрд╛рдпрдерди рдЯрд┐рдкреНрд╕ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЪреМрдерд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред


рдкрд┐рдЫрд▓реЗ рдЪрдпрди:



рдУрд╡рд░рд░рд╛рдЗрдб рдФрд░ рдУрд╡рд░рд▓реЛрдб


рджреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдФрд░ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧред


рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдмрдЪреНрдЪрд╛ рд╡рд░реНрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЙрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (C # рдореЗрдВ override рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдФрд░ рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд (рдЬрд╛рд╡рд╛ рдореЗрдВ @Override рдПрдиреЛрдЯреЗрд╢рди) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдРрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдирдХ рдЕрдВрдХрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд╕реНрдЯрдо @override рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред


рдУрд╡рд░рд▓реЛрдб рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред рдпрд╣ рд╢рдмреНрдж рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрдИ рдХрд╛рд░реНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рдеред рдЬрд╛рд╡рд╛ рдФрд░ C ++ рдореЗрдВ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 class Foo { public static void main(String[] args) { System.out.println(Hello()); } public static String Hello() { return Hello("world"); } public static String Hello(String name) { return "Hello, " + name; } } 

рдЕрдЬрдЧрд░ рдХреЗрд╡рд▓ рдирд╛рдо рд╕реЗ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдРрд╕реЗ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрд░реНрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧреЗрдЧрд╛, рдФрд░ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:


 def quadrilateral_area(*args): if len(args) == 4: quadrilateral = Quadrilateral(*args) elif len(args) == 1: quadrilateral = args[0] else: raise TypeError() return quadrilateral.area() 

рдпрджрд┐ рдЖрдкрдХреЛ рдЯрд╛рдЗрдк рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ @overload рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде typing рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ typing :


 from typing import overload @overload def quadrilateral_area( q: Quadrilateral ) -> float: ... @overload def quadrilateral_area( p1: Point, p2: Point, p3: Point, p4: Point ) -> float: ... 

рдСрдЯреЛ рд╡рд┐рдЪрд▓рди


collections.defaultdict рдЖрдкрдХреЛ рдПрдХ рдРрд╕рд╛ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рдХреБрдВрдЬреА рдЧрд╛рдпрдм рд╣реИ (рдмрдЬрд╛рдп KeyError рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП)ред рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП defaultdict рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдРрд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ред


рддреЛ рдЖрдк рдПрдХ рд╡рд╕реНрддреБрддрдГ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ d[a][b][c]...[z] рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


 >>> def infinite_dict(): ... return defaultdict(infinite_dict) ... >>> d = infinite_dict() >>> d[1][2][3][4] = 10 >>> dict(d[1][2][3][5]) {} 

рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рдСрдЯреЛ-рд╡рд┐рд╡рд┐рдлрд┐рдХреЗрд╢рди" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд░реНрд▓ рд╕реЗ рдЖрддрд╛ рд╣реИред


рдЗрдиреНрд╕реНрдЯреЗрдиреНрд╢рд┐рдпрд╢рди


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


рд╣рд╛рд▓рд╛рдБрдХрд┐, __new__ рдХреЛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ __new__ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ __init__ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 class Foo: def __new__(cls, x): return dict(x=x) def __init__(self, x): print(x) # Never called print(Foo(0)) 

рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдирд┐рдпрдорд┐рдд рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ ( Foo(...) ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ __new__ рдореЗрдВ рдЙрд╕реА рд╡рд░реНрдЧ рдХреЛ __new__ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд╕реЗ __init__ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред


рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐:


 class Foo: def __new__(cls, x): return Foo(-x) # Recursion 

рдбрдмрд▓ рдирд┐рд╖реНрдкрд╛рджрди __init__ :


 class Foo: def __new__(cls, x): if x < 0: return Foo(-x) return super().__new__(cls) def __init__(self, x): print(x) self._x = x 

рд╕рд╣реА рддрд░реАрдХрд╛:


 class Foo: def __new__(cls, x): if x < 0: return cls.__new__(cls, -x) return super().__new__(cls) def __init__(self, x): print(x) self._x = x 

рдСрдкрд░реЗрдЯрд░ [] рдФрд░ рд╕реНрд▓рд╛рдЗрд╕


рдкрд╛рдпрдерди рдореЗрдВ, рдЖрдк __getitem__ рдореИрдЬрд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ [] рдСрдкрд░реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ:


 class Cycle: def __init__(self, lst): self._lst = lst def __getitem__(self, index): return self._lst[ index % len(self._lst) ] print(Cycle(['a', 'b', 'c'])[100]) # 'b' 

рдпрд╣рд╛рдБ рдЕрд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ [] рдСрдкрд░реЗрдЯрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рди рдХреЗрд╡рд▓ [2] , рдмрд▓реНрдХрд┐ [2:10] , [2:10:2] , [2::2] рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ [:] ред рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╣реИрдВ: [рдкреНрд░рд╛рд░рдВрдн: рд╕реНрдЯреЙрдк: рд╕реНрдЯреЗрдк], рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде __getitem__ рдХреЛ рдХреЙрд▓ __getitem__ , рддреЛ рдЗрд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓реЗрдЧрд╛? рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЯреБрдХрдбрд╝рд╛ рд╡рд╕реНрддреБрдУрдВ рдореМрдЬреВрдж рд╣реИрдВред


 In : class Inspector: ...: def __getitem__(self, index): ...: print(index) ...: In : Inspector()[1] 1 In : Inspector()[1:2] slice(1, 2, None) In : Inspector()[1:2:3] slice(1, 2, 3) In : Inspector()[:] slice(None, None, None) 

рддреБрдо рднреА tuples рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЧрдардмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 In : Inspector()[:, 0, :] (slice(None, None, None), 0, slice(None, None, None)) 

slice рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ start , stop рдФрд░ step рд╕рдВрдЧреНрд░рд╣реАрдд stop ред


 In : s = slice(1, 2, 3) In : s.start Out: 1 In : s.stop Out: 2 In : s.step Out: 3 

рдЕрд╕рд┐рдВрд╕реАрдУ рдХреЛрд░рдЯрд╛рдЗрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛


рдХрд┐рд╕реА рднреА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп asyncio рдХреЛ cancel() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░рд╕реНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд░рджреНрдж рдХрд┐рдП рдЧрдПError рдХреЛ coroutine рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА coroutines рдХреЛ рддрдм рддрдХ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рд╛ рдФрд░ рджрдмрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ред


CancelledError рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХреНрд╕рд░рд╕рд╛рдЗрдЬ Exception рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЧрд▓рддреА рд╕реЗ "рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐" рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП try ... except Exception рдкрдХрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ coroutine рдХреЗ рд▓рд┐рдП рдмрдЧ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


 try: await action() except asyncio.CancelledError: raise except Exception: logging.exception('action failed') 

рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛


рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдХреБрдЫ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, asyncio рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ await asyncio.sleep(x) рдХрд░рддрд╛ рд╣реИ:


 import asyncio async def do(n=0): print(n) await asyncio.sleep(1) loop.create_task(do(n + 1)) loop.create_task(do(n + 1)) loop = asyncio.get_event_loop() loop.create_task(do()) loop.run_forever() 

рд▓реЗрдХрд┐рди рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬреИрд╕реЗ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╛рд░реНрдп do )ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдлрд╝рдВрдХреНрд╢рдВрд╕ loop.call_later рдФрд░ loop.call_at рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


 import asyncio def do(n=0): print(n) loop = asyncio.get_event_loop() loop.call_later(1, do, n+1) loop.call_later(1, do, n+1) loop = asyncio.get_event_loop() do() loop.run_forever() 

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


All Articles