@Pythonetc рд╕рдВрдХрд▓рди рдорд╛рд░реНрдЪ 2019


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

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

0_0


0_0 рдкрд╛рдпрдерди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред

рдХреЛрдИ рдирд╣реАрдВ рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ


рдХрд┐рд╕реА None рдорд╛рди рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдПрдХ рдХрдард┐рди рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

 In [1]: data = [  ...: dict(a=1),  ...: None,  ...: dict(a=-3),  ...: dict(a=2),  ...: None,  ...: ] In [2]: sorted(data, key=lambda x: x['a']) ... TypeError: 'NoneType' object is not subscriptable 

рдЖрдк рд╕рднреА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрд╛рдБрдЯрдиреЗ рдХреЗ рдмрд╛рдж (рд╕реВрдЪреА рдХреЗ рдЖрд░рдВрдн рдпрд╛ рдЕрдВрдд рддрдХ) рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 In [3]: sorted(  ...: (d for d in data if d is not None),  ...: key=lambda x: x['a']  ...: ) + [  ...: d for d in data if d is None  ...: ] Out[3]: [{'a': -3}, {'a': 1}, {'a': 2}, None, None] 

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдмреЗрд╣рддрд░ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ key рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 In [4]: sorted(data, key=lambda x: float('inf') if x is None else x['a']) Out[4]: [{'a': -3}, {'a': 1}, {'a': 2}, None, None] 

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

 In [5]: sorted(data, key=lambda x: (1, None) if x is None else (0, x['a'])) Out[5]: [{'a': -3}, {'a': 1}, {'a': 2}, None, None] 

рдХреЙрд▓ random.seed ()


рдЬрдм рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╛рдВрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреАрдЬ рдХреЛ рд╕рднреА рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирддреАрдЬрддрди, рдЙрдирдореЗрдВ рдПрдХ рд╣реА "рдпрд╛рджреГрдЪреНрдЫрд┐рдХ" рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ random.seed() рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк multiprocessing рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 import multiprocessing        import random                 import os                     import sys                    def test(a):                  print(random.choice(a), end=' ') a = [1, 2, 3, 4, 5]           for _ in range(5):            test(a)                   print()                       for _ in range(5):            p = multiprocessing.Process(   target=test, args=(a,) )                         p.start()                 p.join()                  print()                       for _ in range(5):            pid = os.fork()           if pid == 0:              test(a)               sys.exit()            else:                     os.wait()             print() 

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 4 4 4 5 5 1 4 1 3 3 2 2 2 2 2 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдкрд╛рдпрдереЙрди 3.7 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирдП at_fork at_fork рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЖрдк os.fork рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдкрд░реЛрдХреНрдд рдкрд╛рдпрдерди 3.7 рдХреЛрдб рдпрд╣ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:

 1 2 2 1 5 4 4 4 5 5 2 4 1 3 1 

рдЬреЛрдбрд╝ реж


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ sum([a, b, c]) a + b + c рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордХрдХреНрд╖ 0 + a + b + c ред рддреЛ рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреЛ 0 рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:

 class MyInt: def __init__(self, value): self.value = value def __add__(self, other): return type(self)(self.value + other.value) def __radd__(self, other): return self + other def __repr__(self): class_name = type(self).__name__ return f'{class_name}({self.value})' In : sum([MyInt(1), MyInt(2)]) ... AttributeError: 'int' object has no attribute 'value' 

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рд╢реБрд░реБрдЖрддреА рддрддреНрд╡ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 0 рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 In : sum([MyInt(1), MyInt(2)], MyInt(0)) Out: MyInt(3) 

sum float рдФрд░ int рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╣ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП bytes , bytearray рдФрд░ bytearray рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ:

 In : sum(['a', 'b'], '') ... TypeError: sum() can't sum strings [use ''.join(seq) instead] In : ints = [x for x in range(10_000)] In : my_ints = [Int(x) for x in ints] In : %timeit sum(ints) 68.3 ┬╡s ┬▒ 142 ns per loop (mean ┬▒ std. dev. of 7 runs, 10000 loops each) In : %timeit sum(my_ints, Int(0)) 5.81 ms ┬▒ 20.5 ┬╡s per loop (mean ┬▒ std. dev. of 7 runs, 100 loops each) 



рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рд╕рдорд╛рдкрди


_ipython_key_completions_ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, _ipython_key_completions_ рдПрдХ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд _ipython_key_completions_ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк d["x рдЬреИрд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рдж рдЯреИрдм рджрдмрд╛рддреЗ рд╣реИрдВ:



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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


All Articles