рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЕрдореВрд░реНрддрддрд╛

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

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

рдХрдкреЛрд▓-рдХрд▓реНрдкрдирд╛


рд╢реБрд░реВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдирдпрд╛ рдЕрдореВрд░реНрдд рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
  1. рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВред
  2. рдЙрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВред
  3. рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  4. рдЪрдпрдирд┐рдд рдирд╛рдо рдХреЗ рдкреАрдЫреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЫрд┐рдкрд╛рдПрдБред

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

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

рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд, рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛ ...

рдЬреАрд╡рди рдЙрджрд╛рд╣рд░рдг


рдирд┐рдпрдорд┐рдд рдЕрдЬрдЧрд░ рдХреЛрдб (рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛):

urls = ... photos = [] for url in urls: for attempt in range(DOWNLOAD_TRIES): try: photos.append(download_image(url)) break except ImageTooSmall: pass #     except (urllib2.URLError, httplib.BadStatusLine, socket.error), e: if attempt + 1 == DOWNLOAD_TRIES: raise 

рдЗрд╕ рдХреЛрдб рдХреЗ рдХрдИ рдкрд╣рд▓реВ рд╣реИрдВ: url рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдирд╛, рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛, рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛, рдЫреЛрдЯреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛, рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд▓реЛрдб рдХреЛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ред рдЗрди рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХреЛ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдЙрд▓рдЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрдЯрд░реНрд╢рди + рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд map рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 photos = map(download_image, urls) 

рдЖрдЗрдП рдЕрдиреНрдп рдкрд╣рд▓реБрдУрдВ рдХреЛ рднреА рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЪрд▓реЛ рдЫреЛрдЯреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 @contextmanager def skip(error): try: yield except error: pass for url in urls: with skip(ImageTooSmall): photos.append(download_image(url)) 

рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЦрд╛рдореА рд╣реИ - рдореБрдЭреЗ map рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред рдЖрдЗрдП рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдкрд╣рд▓реВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдкрд┐рдЫрд▓реЗ рдЕрдореВрд░реНрдд рдХреЗ рд╕рдорд╛рди, рдХреЛрдИ рднреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 with retry(DOWNLOAD_TRIES, (urllib2.URLError, httplib.BadStatusLine, socket.error)): # ... do stuff 

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

рдЖрдЗрдП рдПрдХ рдЙрдЪреНрдЪ рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд▓реМрдЯреЗрдВ, рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ - рд╕рдЬреНрдЬрд╛рдХрд╛рд░:

 @decorator def retry(call, tries, errors=Exception): for attempt in range(tries): try: return call() except errors: if attempt + 1 == tries: raise http_retry = retry(DOWNLOAD_TRIES, (urllib2.URLError, httplib.BadStatusLine, socket.error)) harder_download_image = http_retry(download_image) photos = map(harder_download_image, urls) 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг map рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рднреА рдорд┐рд▓реАрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХрд┐рд╕реА retry рдЙрдкрдпреЛрдЧреА retry - http_retry рдФрд░ http_retry ред

рд╣рдо рдПрдХ рд╣реА рд╢реИрд▓реА рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 @decorator def skip(call, errors=Exception): try: return call() except errors: return None skip_small = skip(ImageTooSmall) http_retry = retry(DOWNLOAD_TRIES, (urllib2.URLError, httplib.BadStatusLine, socket.error)) download = http_retry(skip_small(download_image)) photos = filter(None, map(download, urls)) 

рдЫреЛрдбрд╝реА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП filter рдЖрд╡рд╢реНрдпрдХрддрд╛ filter ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, filter(None, map(f, seq)) рдкреИрдЯрд░реНрди filter(None, map(f, seq)) рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ ред

рд╣рдо рдЗрд╕реЗ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 def keep(f, seq): return filter(None, map(f, seq)) photos = keep(download, urls) 

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

PS рдпрд╣рд╛рдБ рдкрд░ @decorator рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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

PPPS рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдЖрдкрдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣" рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

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


All Articles