рдкрд╛рдпрдерди рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╡рд░ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП

рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкрд╛рдпрдерди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

def memo_square(a, cache={}): if a not in cache: cache[a] = a*a return cache[a] 

рд░рд┐рд╕реЗрдкреНрд╢рди рдЕрд╡рд╛рдВрдЫрдиреАрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХрдо рдЬреНрдЮрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред memo_square (рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣) рдлрд╝рдВрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ, рдПрдХ memo_square.__defaults__ рдЯрдкрд▓ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╢рдмреНрджрдХреЛрд╢ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣реЗрдбрд░ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 >>> memo_square.__defaults__ ({},) 

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

 >>> def test(a=1, b=2): ... print(a, b) ... >>> test.__defaults__ (1, 2) >>> test() 1 2 >>> test.__defaults__ = (', ', '') >>> test() ,  >>> test.__defaults__[1] = '' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> test.__defaults__ = {0: ', ', 1: ''} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: __defaults__ must be set to a tuple object 

рд╕реЛрд░рди, рдпрд╣ рд▓реЗрдЦ рдкрд┐рдХрд╛рдмрд╛ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдЦреИрд░, рдареАрдХ рд╣реИ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐, рдмрд╣реБрдд рд╣реА рдЪрд╛рд▓рд╛рдХ рдХреЛрдб рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, func.__defaults__ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЯреНрдпреВрдкрд▓ рдФрд░ рдЙрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рдЬрдм рддрдХ рдлрд╝рдВрдХреНрд╢рди рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛, рддрдм рддрдХ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рддрддреНрд╡ рдЦреБрдж рдХреЛ рдмрджрд▓рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рддреЛ рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдЕрдЬрдЧрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рдХреЙрд▓ рдХреЗ рдмрд╛рдж, memo_square.__defaults__ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 >>> memo_square(2) 4 >>> memo_square.__defaults__ ({2: 4},) >>> memo_square(5) 25 >>> memo_square.__defaults__ ({2: 4, 5: 25},) >>> memo_square(2) 4 >>> memo_square.__defaults__ ({2: 4, 5: 25},) 

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рди рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдХреИрд╢ рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдн рдЫреЛрдЯрд╛ рд╣реИ (рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдн рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЦреЛрдЬрдирд╛ рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╣рдВрдЧреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдорд░рдг / рдХреИрд╢рд┐рдВрдЧ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • @ functionalools.lru_cache ред рдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЬреЛ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╣реИрд╢рдмрд┐рд▓рд┐рдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реИрдВред рдкрд╣рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╕реЗрдЯ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдпрд╛ рдЬрдм рдмреБрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдлреНрд░реЗрдЬрд╝реЗрдирд╕реЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдирдВрдмрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ lru_cache рдХреИрд╢ рдлрд┐рд░ рд╕реЗ рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЙрд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ (рдореЗрдореЛрд░реА рд▓реАрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред
  • рдХреИрд╢ рдЖрдЙрдЯрд╕рд╛рдЗрдб рдлрдВрдХреНрд╢рди:

     def square(a): return a**a cache = {} for x in values: if x not in cache: cache[x] = x**x print cache[x] 

    рдЕрд░реНрде рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдХреИрд╢ рд╡реИрд░рд┐рдПрдмрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕реЗ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдорд░рдг рдХреЗ рджреМрд░рд╛рди рдХреИрд╢ рдХреЗрд╡рд▓ func.__defaults__ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╣реИ, рдЬреЛ рдЧрд▓рддреА рд╕реЗ рдкрд╣реБрдВрдЪрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
  • рдХреИрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлреНрд▓рд╢ рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЬрдЯрд┐рд▓ рдХреИрд╢рд┐рдВрдЧ рддрд░реНрдХ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛрдб рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдХрд╛рд░рдг рдФрд░ рднреА рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдЪреАрдЬ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд┐рд╕реА рдЪреАрдЬ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЕрдЧрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛рджрдЧрд╛рд░ рдХрд╛рд░реНрдп рд╣реИрдВред

рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдорд░рдг рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИред рдирд┐рдЬреА рддреМрд░ рдкрд░, рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдлреИрд╕рд▓реЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рддреЛ рдореИрдВрдиреЗ рдХреБрдЫ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВред рджреВрд╕рд░реА рдУрд░, рдЗрди рджреЛ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╕рдордЭрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдкрд╛рдпрдерди рдХреИрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рднрд▓реЗ рд╣реА рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ (рд╕рдВрд╕реНрдорд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП), рдпрд╣ рддрдХрдиреАрдХ рдХрд┐рд╕реА рднреА рдкреЛрд╖рдг рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред

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


All Articles