{"id":195266,"date":"2013-09-26T00:04:08","date_gmt":"2013-09-25T20:04:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=195266"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=195266","title":{"rendered":"<span class=\"post_title\">\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b Python \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e \u043a\u043e\u043d\u0446\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\">       <i>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u042d\u0442\u043e \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435. \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u0440\u0430\u0434\u0438 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f \u0438 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u0441 stackoverflow) \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0439 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u2014 \u043e\u043d\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430. \u041e\u043d\u0430 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0438 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c \u043a\u0430\u043a \u0438 \u044f) \u043e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043a\u0430\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438 \u0443\u0442\u043e\u043b\u0438\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u0441\u0442\u0432\u043e.<br \/>  \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u0438\u0445 &quot;[..]&quot; \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u2014 \u044d\u0442\u043e \u043c\u043e\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043d\u0435\u0442. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445 \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435\u0436\u0435 \u043f\u043b\u043e\u0445, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u043d\u0430 \u0432\u0430\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<br \/>  \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<br \/>  <\/i><\/p>\n<h2>Python: \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/h2>\n<p>  \u0427\u0442\u043e \u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 python \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"python\">def shout(word=&quot;yes&quot;):     return word.capitalize()+&quot;!&quot;  print shout() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 'Yes!'  # \u0422\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u0446\u0438\u044f - \u043e\u0431\u044a\u0435\u043a\u0442, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.  scream = shout  # \u041e\u0442\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043a\u043e\u0431\u043a\u0438: \u043c\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043c\u044b # \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;shout&quot; \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e &quot;scream&quot;.  # \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;shout&quot; \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 &quot;scream&quot;:  print scream() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 'Yes!'  # \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 'shout', \u0438 # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 'scream'  del shout try:     print shout() except NameError, e:     print e     #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: &quot;name 'shout' is not defined&quot;  print scream() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 'Yes!' <\/code><\/pre>\n<p>  <a name=\"habracut\"><\/a><br \/>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0443\u043c\u0435, \u043c\u044b \u0441\u043a\u043e\u0440\u043e \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0435\u0439. \u0414\u0440\u0443\u0433\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 Python, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b\u2026 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438!<\/p>\n<pre><code class=\"python\"> def talk():      # \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u043b\u0435\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &quot;talk&quot; ...     def whisper(word=&quot;yes&quot;):         return word.lower()+&quot;...&quot;      # ... \u0438 \u0442\u043e\u0442\u0447\u0430\u0441 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451!      print whisper()  # \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;talk&quot;, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;whisper&quot; \u041a\u0410\u0416\u0414\u042b\u0419 \u0420\u0410\u0417, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u0435\u0451(&quot;talk&quot;), \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 # \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;whisper&quot; \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &quot;talk&quot;.  talk() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:  # &quot;yes...&quot;  # \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f &quot;whisper&quot; \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &quot;talk&quot;:  try:     print whisper() except NameError, e:     print e     #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 : &quot;name 'whisper' is not defined&quot;* <\/code><\/pre>\n<h2>\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c<\/h2>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0432\u044b \u0432\u0441\u0435 \u0435\u0449\u0435 \u0437\u0434\u0435\u0441\u044c? \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u0412\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438:<br \/>  -\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439;<br \/>  -\u041c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \ud83d\ude42 [\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442 \u0434\u0432\u043e\u0439\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8216;return&#8217;: 1) \u043a\u0430\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440: &#8216;\u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 return \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439&#8217;, \u0442\u0430\u043a \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 &#8216;to return&#8217;. \u0421\u043c\u044b\u0441\u043b \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0438\u043a\u0430\u043a, \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u043c \ud83d\ude42 <i>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430<\/i>] <br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c:<\/p>\n<pre><code class=\"python\"> def getTalk(type=&quot;shout&quot;):      # \u041c\u044b \u043d\u0430 \u043b\u0435\u0442\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438     def shout(word=&quot;yes&quot;):         return word.capitalize()+&quot;!&quot;      def whisper(word=&quot;yes&quot;) :         return word.lower()+&quot;...&quot;;      # \u0410 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043d\u0438\u0445     if type == &quot;shout&quot;:         # \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c &quot;()&quot;, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e,         # \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438         return shout       else:         return whisper  # \u0421 \u0447\u0435\u043c \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0435\u0434\u044f\u0442? [\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0440\u0430\u0437\u0430 'How do you use this strange beast?' \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a '\u041a\u0430\u043a \u0442\u0435\u0431\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0437\u0432\u0435\u0440\u044f?']  # \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044e talk = getTalk()        # \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f &quot;talk&quot; \u0437\u0434\u0435\u0441\u044c - \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: print talk #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 : &lt;function shout at 0xb7ea817c&gt;  # \u041e\u0431\u044a\u0435\u043a\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439: print talk() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 : Yes!  # \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u0441\u0435\u0431\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0438\u043a\u043e [\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0440\u0430\u0437\u0430 'feel wild']: print getTalk(&quot;whisper&quot;)() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 : yes... <\/code><\/pre>\n<p>  \u041d\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435! \u0415\u0441\u043b\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:<\/p>\n<pre><code class=\"python\"> def doSomethingBefore(func):      print &quot;\u042f \u0434\u0435\u043b\u0430\u044e \u0447\u0442\u043e-\u0442\u043e \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u043c\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e&quot;     print func()  doSomethingBefore(scream) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:  #\u042f \u0434\u0435\u043b\u0430\u044e \u0447\u0442\u043e-\u0442\u043e \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u043c\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e #Yes! <\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b. \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u044d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0438, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, <br \/>  \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0430\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<h2>\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438<\/h2>\n<p>  \u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"python\"> # \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 - \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u0432\u0438\u0434\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 def my_shiny_new_decorator(a_function_to_decorate):      # \u0412\u043d\u0443\u0442\u0440\u0438, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u043b\u0435\u0442\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e: \u043e\u0431\u0435\u0440\u0442\u043a\u0443.     # \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0430\u0448\u0435\u0439 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438     # \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d\u0430 (\u043e\u0431\u0435\u0440\u0442\u043a\u0430) \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.     def the_wrapper_around_the_original_function():          # \u0417\u0434\u0435\u0441\u044c \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0414\u041e \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438          print &quot;\u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&quot;          # \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0434\u0435\u0441\u044c (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043a\u043e\u0431\u043a\u0438)         a_function_to_decorate()          # \u0417\u0434\u0435\u0441\u044c \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u041f\u041e\u0421\u041b\u0415 \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438          print &quot;\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&quot;      # \u0421 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, &quot;a_function_to_decorate&quot; \u041d\u0415 \u0411\u042b\u041b\u0410 \u0412\u042b\u041f\u041e\u041b\u041d\u0415\u041d\u0410     # \u041c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438     # \u0421\u0430\u043c\u0430 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435     # \u0412\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e!     return the_wrapper_around_the_original_function  # \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c! def a_stand_alone_function():     print &quot;\u042f \u043e\u0434\u0438\u043d\u043e\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c \u043e \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438...&quot;  a_stand_alone_function()  #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u042f \u043e\u0434\u0438\u043d\u043e\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c \u043e \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438...  # \u0425\u043e\u0440\u043e\u0448\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c &quot;\u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c&quot; \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. # \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0439\u0442\u0435 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0443, \u043e\u043d \u043e\u0431\u0435\u0440\u043d\u0435\u0442 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 # \u0438 \u0432\u0435\u0440\u043d\u0435\u0442 \u0432\u0430\u043c \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.  a_stand_alone_function_decorated = my_shiny_new_decorator(a_stand_alone_function) a_stand_alone_function_decorated() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 #\u042f \u043e\u0434\u0438\u043d\u043e\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c \u043e \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438... #\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <\/code><\/pre>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 a_stand_alone_function, \u0432\u0437\u0430\u043c\u0435\u043d \u043d\u0435\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f a_stand_alone_function_decorated.<br \/>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e! \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u044c\u0442\u0435 a_stand_alone_function \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 my_shiny_new_decorator:<\/p>\n<pre><code class=\"python\"> a_stand_alone_function = my_shiny_new_decorator(a_stand_alone_function) a_stand_alone_function() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 #\u042f \u043e\u0434\u0438\u043d\u043e\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c \u043e \u043c\u043e\u0435\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438... #\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  # \u0418 \u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e? \u042d\u0442\u043e \u0418\u041c\u0415\u041d\u041d\u041e \u0422\u041e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! <\/code><\/pre>\n<h2>\u0420\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u0439\u043d\u0443 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432!<\/h2>\n<p>  \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"python\"> @my_shiny_new_decorator def another_stand_alone_function():     print &quot;\u041e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043c\u0435\u043d\u044f \u043e\u0434\u043d\u0443&quot;  another_stand_alone_function()   #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:   #\u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 #\u041e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043c\u0435\u043d\u044f \u043e\u0434\u043d\u0443 #\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <\/code><\/pre>\n<p>  \u0414\u0430, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u043e. <a href=\"http:\/\/habrahabr.ru\/users\/decorator\/\" class=\"user_link\">decorator<\/a> \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"python\"> another_stand_alone_function = my_shiny_new_decorator(another_stand_alone_function) <\/code><\/pre>\n<p>  \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e Python \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"http:\/\/goo.gl\/FJXspX\">decorator<\/a>. \u0412\u043e\u043e\u0431\u0449\u0435, \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 Python \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/goo.gl\/E5ier1\">\u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/a>.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c:<\/p>\n<pre><code class=\"python\"> def bread(func):     def wrapper():         print &quot;&lt;\/'''''''''\\&gt;&quot;         func()         print &quot;&lt;\\_________\/&gt;&quot;     return wrapper  def ingredients(func):     def wrapper():         print &quot;#\u043f\u043e\u043c\u0438\u0434\u043e\u0440\u043a\u0438#&quot;         func()         print &quot;~\u0441\u0430\u043b\u0430\u0442\u0438\u043a~&quot;     return wrapper  def sandwich(food=&quot;--\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430--&quot;):     print food  sandwich() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: --\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430-- sandwich = bread(ingredients(sandwich)) sandwich() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #&lt;\/'''''''''\\&gt; # #\u043f\u043e\u043c\u0438\u0434\u043e\u0440\u043a\u0438# # --\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430-- # ~\u0441\u0430\u043b\u0430\u0442\u0438\u043a~ #&lt;\\_________\/&gt; <\/code><\/pre>\n<p>  \u0422\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 Python:<\/p>\n<pre><code class=\"python\"> @bread @ingredients def sandwich(food=&quot;--\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430--&quot;):     print food  sandwich() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #&lt;\/'''''''''\\&gt; # #\u043f\u043e\u043c\u0438\u0434\u043e\u0440\u043a\u0438# # --\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430-- # ~\u0441\u0430\u043b\u0430\u0442\u0438\u043a~ #&lt;\\_________\/&gt; <\/code><\/pre>\n<p>  \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0418\u041c\u0415\u0415\u0422 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\"> @ingredients @bread def strange_sandwich(food=&quot;--\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430--&quot;):     print food  strange_sandwich() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: # #\u043f\u043e\u043c\u0438\u0434\u043e\u0440\u043a\u0438# #&lt;\/'''''''''\\&gt; # --\u0432\u0435\u0442\u0447\u0438\u043d\u043a\u0430-- #&lt;\\_________\/&gt; # ~\u0441\u0430\u043b\u0430\u0442\u0438\u043a~ <\/code><\/pre>\n<p>  [\u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441 stackoverflow, \u0442\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0441\u044f \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043e\u043d \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u0438 \u0432\u044b\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0435\u0433\u043e \u0443\u0431\u0440\u0430\u0442\u044c]<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0439\u0442\u0438 \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u044b\u043c\u0438 \u0438\u043b\u0438 \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043d\u0430\u043f\u0440\u044f\u0447\u044c \u043c\u043e\u0437\u0433\u0438 \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435!<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440<\/h2>\n<pre><code class=\"python\"> # \u042d\u0442\u043e \u043d\u0435 \u0447\u0435\u0440\u043d\u0430\u044f \u043c\u0430\u0433\u0438\u044f, \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442:  def a_decorator_passing_arguments(function_to_decorate):     def a_wrapper_accepting_arguments(arg1, arg2):         print &quot;\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b! \u0421\u043c\u043e\u0442\u0440\u0438:&quot;, arg1, arg2         function_to_decorate(arg1, arg2)     return a_wrapper_accepting_arguments  # \u0421 \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0443\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u0432\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0435 \u043e\u0431\u0435\u0440\u0442\u043a\u0443.  # \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0435\u0440\u0442\u043a\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0438\u0445 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438  @a_decorator_passing_arguments def print_full_name(first_name, last_name):     print &quot;\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442&quot;, first_name, last_name  print_full_name(&quot;\u041f\u0438\u0442\u0435\u0440&quot;, &quot;\u0412\u0435\u043d\u043a\u043c\u0430\u043d&quot;) # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b! \u0421\u043c\u043e\u0442\u0440\u0438: \u041f\u0438\u0442\u0435\u0440 \u0412\u0435\u043d\u043a\u043c\u0430\u043d #\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0438\u0442\u0435\u0440 \u0412\u0435\u043d\u043a\u043c\u0430\u043d <\/code><\/pre>\n<h2>\u041c\u0435\u0442\u043e\u0434\u044b \u00ab\u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb<\/h2>\n<p>  \u0427\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u043e \u0432 Python, \u0442\u0430\u043a \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435, \u0441 \u043e\u0434\u043d\u0438\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c, <br \/>  \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 (self). <br \/>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0442\u0435\u043c \u0436\u0435 \u043f\u0443\u0442\u0435\u043c \u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u0440\u043ec\u0442\u043e \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c self:<\/p>\n<pre><code class=\"python\"> def method_friendly_decorator(method_to_decorate):     def wrapper(self, lie):         lie = lie - 3 # \u043e\u0447\u0435\u043d\u044c \u043f\u043e \u0434\u0440\u0443\u0436\u0435\u0441\u043a\u0438, \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0442\u0440\u043e\u0439\u043a\u0443 \u0433\u043e\u0434\u043a\u043e\u0432 :)         return method_to_decorate(self, lie)      return wrapper   class Lucy(object):      def __init__(self):         self.age = 32      @method_friendly_decorator     def sayYourAge(self, lie):         print &quot;\u041c\u043d\u0435 %s \u043b\u0435\u0442, \u0447\u0442\u043e \u0434\u0443\u043c\u0430\u0435\u0448\u044c?&quot; % (self.age + lie)  l = Lucy() l.sayYourAge(-3) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u041c\u043d\u0435 26 \u043b\u0435\u0442, \u0447\u0442\u043e \u0434\u0443\u043c\u0430\u0435\u0448\u044c? <\/code><\/pre>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0447\u0442\u043e \u0431\u044b \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u043b\u044e\u0431\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 *args, **kwargs:<\/p>\n<pre><code class=\"python\"> def a_decorator_passing_arbitrary_arguments(function_to_decorate):     # \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b     def a_wrapper_accepting_arbitrary_arguments(*args, **kwargs):         print &quot;\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b?:&quot;         print args         print kwargs         # \u041a\u043e\u0433\u0434\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c *args \u0438 **kwargs [\u043a\u043e\u0440\u0442\u0435\u0436\u0438 \u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u0438]         # \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0442\u0443\u0442:         # http:\/\/www.saltycrane.com\/blog\/2008\/01\/how-to-use-args-and-kwargs-in-python\/         function_to_decorate(*args, **kwargs)     return a_wrapper_accepting_arbitrary_arguments  @a_decorator_passing_arbitrary_arguments def function_with_no_argument():     print &quot;Python \u043a\u0440\u0443\u0442\u043e\u0439 \u044f\u0437\u044b\u043a, \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432&quot;  function_with_no_argument() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 #\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b?: #() #{} #Python \u043a\u0440\u0443\u0442\u043e\u0439 \u044f\u0437\u044b\u043a, \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432  @a_decorator_passing_arbitrary_arguments def function_with_arguments(a, b, c):     print a, b, c  function_with_arguments(1,2,3) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 #\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b?: #(1, 2, 3) #{} #1 2 3   @a_decorator_passing_arbitrary_arguments def function_with_named_arguments(a, b, c, platypus=&quot;\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u0442?&quot;):     print &quot;%s, %s \u0438 %s \u043b\u044e\u0431\u044f\u0442 \u0443\u0442\u043a\u0430\u043d\u043e\u0441\u043e\u0432? %s&quot; %\\     (a, b, c, platypus)  function_with_named_arguments(&quot;\u0411\u0438\u043b&quot;, &quot;\u041b\u0438\u043d\u0443\u0441&quot;, &quot;\u0421\u0442\u0438\u0432&quot;, platypus=&quot;\u041a\u043e\u043d\u0435\u0447\u043d\u043e!&quot;) #[\u0435\u0441\u043b\u0438 \u0447\u0442\u043e, \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432\u0432\u0438\u0434\u0443 \u0411\u0438\u043b\u043b \u0413\u0435\u0439\u0442\u0441, \u041b\u0438\u043d\u0443\u0441 \u0422\u043e\u0440\u0432\u0430\u043b\u044c\u0434 \u0438 \u0421\u0442\u0438\u0432 \u0414\u0436\u043e\u0431\u0441 ;) ] #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 #\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b?: #('\u0411\u0438\u043b', '\u041b\u0438\u043d\u0443\u0441', '\u0421\u0442\u0438\u0432') #{'platypus': '\u041a\u043e\u043d\u0435\u0447\u043d\u043e!'} #\u0411\u0438\u043b, \u041b\u0438\u043d\u0443\u0441 \u0438 \u0421\u0442\u0438\u0432 \u043b\u044e\u0431\u044f\u0442 \u0443\u0442\u043a\u043e\u043d\u043e\u0441\u043e\u0432? \u041a\u043e\u043d\u0435\u0447\u043d\u043e!  class Mary(object):      def __init__(self):         self.age = 31      @a_decorator_passing_arbitrary_arguments     def sayYourAge(self, lie=-3): # \u0412\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e         print &quot;\u041c\u043d\u0435 %s \u043b\u0435\u0442, \u0427\u0442\u043e \u0434\u0443\u043c\u0430\u0435\u0448\u044c?&quot; % (self.age + lie)  m = Mary() m.sayYourAge() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 #\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b?: #(&lt;__main__.Mary object at 0xb7d303ac&gt;,) #{} #\u041c\u043d\u0435 28 \u043b\u0435\u0442, \u0447\u0442\u043e \u0434\u0443\u043c\u0430\u0435\u0448\u044c? <\/code><\/pre>\n<h2>\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440<\/h2>\n<p>  \u0412\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u043d\u043e! \u041d\u043e \u0447\u0442\u043e \u0432\u044b \u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0441\u0430\u043c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440? \u041d\u0443 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440.<br \/>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043a\u0443: <\/p>\n<pre><code class=\"python\"> # \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u044d\u0442\u043e \u041e\u0411\u042b\u0427\u041d\u042b\u0415 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 def my_decorator(func):     print &quot;\u042f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&quot;     def wrapper():         print &quot;\u042f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u0430\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u043c&quot;         func()     return wrapper  # \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e [\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440] \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 &quot;@&quot;  def lazy_function():     print &quot;zzzzzzzz&quot;  decorated_function = my_decorator(lazy_function) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u042f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f  # \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f &quot;\u042f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&quot;,  \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e  \u044d\u0442\u043e \u0432\u0441\u0435 \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435: # \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041d\u0438\u0447\u0435\u0433\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e.  @my_decorator def lazy_function():     print &quot;zzzzzzzz&quot;  #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u042f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <\/code><\/pre>\n<p>  \u041d\u0430 \u0434\u0435\u043b\u0435 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00abmy_decorator\u00bb. \u0422\u0430\u043a \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0438\u0448\u0438\u0442\u0435 @my_decorator, \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 Python \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u00abmy_decorator\u00bb. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0435\u0442\u043a\u0430 [\u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439] \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u2026 \u0438\u043b\u0438 \u043d\u0435\u0442! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043c\u0441\u044f \u0432\u043e \u0437\u043b\u043e!<\/p>\n<pre><code class=\"python\"> def decorator_maker():      print &quot;\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: &quot;+\\           &quot;\u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440.&quot;      def my_decorator(func):          print &quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.&quot;          def wrapped():             print (&quot;\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. &quot;                   &quot;\u042f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.&quot;                   &quot;\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0420\u0415\u0417\u0423\u041b\u042c\u0422\u0410\u0422 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.&quot;)             return func()          print &quot;\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.&quot;         return wrapped      print &quot;\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440!&quot;     return my_decorator  # \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0412 \u043a\u043e\u043d\u0446\u0435-\u043a\u043e\u043d\u0446\u043e\u0432 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. new_decorator = decorator_maker()        #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. #\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440!  # \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e  def decorated_function():     print &quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&quot;  decorated_function = new_decorator(decorated_function) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. #\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.  # \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e: decorated_function() #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. #\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0420\u0415\u0417\u0423\u041b\u042c\u0422\u0410\u0422 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. #\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0422\u041e\u0427\u041d\u041e \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0448\u0442\u0443\u043a\u0443, \u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\"> def decorated_function():     print &quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&quot; decorated_function = decorator_maker()(decorated_function) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. #\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440! #\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. #\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.  # \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432: decorated_function()     #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. #\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0420\u0415\u0417\u0423\u041b\u042c\u0422\u0410\u0422 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. #\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. <\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0421\u041d\u041e\u0412\u0410, \u0435\u0449\u0435 \u043a\u043e\u0440\u043e\u0447\u0435:<\/p>\n<pre><code class=\"python\"> @decorator_maker() def decorated_function():     print &quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f&quot; #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437: \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. #\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440! #\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440! \u042f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. #\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.  #\u0412 \u0438\u0442\u043e\u0433\u0435:  decorated_function()     #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0441\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. #\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u0420\u0415\u0417\u0423\u041b\u042c\u0422\u0410\u0422 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. #\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. <\/code><\/pre>\n<p>  \u042d\u0439, \u0432\u044b \u044d\u0442\u043e \u0432\u0438\u0434\u0435\u043b\u0438? \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 &quot;@&quot; \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \ud83d\ude42<\/p>\n<p>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043d\u0430 \u043b\u0435\u0442\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u0435\u0440\u043d\u043e?<\/p>\n<pre><code class=\"python\"> def decorator_maker_with_arguments(decorator_arg1, decorator_arg2):      print &quot;\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u0418 \u044f \u043f\u0440\u0438\u043d\u044f\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:&quot;, decorator_arg1, decorator_arg2      def my_decorator(func):         # \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0435 \u044d\u0442\u043e \u043f\u043e\u0434\u0430\u0440\u043e\u043a \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f.         # \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u0441\u0435\u0431\u044f \u043d\u0435 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0441 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435\u043c, \u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e,         # \u0438\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435: http:\/\/stackoverflow.com\/questions\/13857\/can-you-explain-closures-as-they-relate-to-python         print &quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0425\u0443\u0434\u043e-\u0431\u0435\u0434\u043d\u043e, \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043c\u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b:&quot;, decorator_arg1, decorator_arg2          # \u041d\u0435 \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u0439\u0442\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438!         def wrapped(function_arg1, function_arg2) :             print (&quot;\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.\\n&quot;                   &quot;\u042f \u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\\n&quot;                   &quot;\\t- \u0418\u0437 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430: {0} {1}\\n&quot;                   &quot;\\t- \u0418\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: {2} {3}\\n&quot;                   &quot;\u0417\u0430\u0442\u0435\u043c \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043c \u0438x \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&quot;                   .format(decorator_arg1, decorator_arg2,                           function_arg1, function_arg2))             return func(function_arg1, function_arg2)          return wrapped      return my_decorator  @decorator_maker_with_arguments(&quot;\u041b\u0435\u043e\u043d\u0430\u0440\u0434&quot;, &quot;\u0428\u0435\u043b\u0434\u043e\u043d&quot;) def decorated_function_with_arguments(function_arg1, function_arg2):     print (&quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0437\u043d\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0441\u0432\u043e\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445:&quot;            &quot; {0} {1}&quot;.format(function_arg1, function_arg2))  decorated_function_with_arguments(&quot;\u0420\u0430\u0434\u0436\u0435\u0448&quot;, &quot;\u0413\u043e\u0432\u0430\u0440\u0434&quot;) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u0418 \u044f \u043f\u0440\u0438\u043d\u044f\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: \u041b\u0435\u043e\u043d\u0430\u0440\u0434 \u0428\u0435\u043b\u0434\u043e\u043d #\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0425\u0443\u0434\u043e-\u0431\u0435\u0434\u043d\u043e, \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043c\u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: \u041b\u0435\u043e\u043d\u0430\u0440\u0434 \u0428\u0435\u043b\u0434\u043e\u043d #\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. #\u042f \u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c  #   - \u0418\u0437 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430: \u041b\u0435\u043e\u043d\u0430\u0440\u0434 \u0428\u0435\u043b\u0434\u043e\u043d #   - \u0418\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: \u0420\u0430\u0434\u0436\u0435\u0448 \u0413\u043e\u0432\u0430\u0440\u0434  #\u0417\u0430\u0442\u0435\u043c \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043c \u0438x \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 #\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0437\u043d\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0441\u0432\u043e\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445: \u0420\u0430\u0434\u0436\u0435\u0448 \u0413\u043e\u0432\u0430\u0440\u0434 <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u043e\u043d, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438:<\/p>\n<pre><code class=\"python\"> c1 = &quot;\u041f\u0435\u043d\u043d\u0438&quot; c2 = &quot;\u041b\u0435\u0441\u043b\u0438&quot;  @decorator_maker_with_arguments(&quot;\u041b\u0435\u043e\u043d\u0430\u0440\u0434&quot;, c1) def decorated_function_with_arguments(function_arg1, function_arg2):     print (&quot;\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0437\u043d\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0441\u0432\u043e\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445:&quot;            &quot; {0} {1}&quot;.format(function_arg1, function_arg2))  decorated_function_with_arguments(c2, &quot;\u0413\u043e\u0432\u0430\u0440\u0434&quot;) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u042f \u0434\u0435\u043b\u0430\u044e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u0418 \u044f \u043f\u0440\u0438\u043d\u044f\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: \u041b\u0435\u043e\u043d\u0430\u0440\u0434 \u041f\u0435\u043d\u043d\u0438 #\u042f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0425\u0443\u0434\u043e-\u0431\u0435\u0434\u043d\u043e, \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043c\u043d\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b: \u041b\u0435\u043e\u043d\u0430\u0440\u0434 \u041f\u0435\u043d\u043d\u0438 #\u042f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. #\u042f \u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c  #   - \u0418\u0437 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430: \u041b\u0435\u043e\u043d\u0430\u0440\u0434 \u041f\u0435\u043d\u043d\u0438 #   - \u0418\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: \u041b\u0435\u0441\u043b\u0438 \u0413\u043e\u0432\u0430\u0440\u0434  #\u0417\u0430\u0442\u0435\u043c \u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043c \u0438x \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 #\u042f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0437\u043d\u0430\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0441\u0432\u043e\u0438\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445: \u041b\u0435\u0441\u043b\u0438 \u0413\u043e\u0432\u0430\u0440\u0434 <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0443 \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u043e\u0442 \u0442\u0440\u044e\u043a. \u0412\u044b \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c *args, **kwargs, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435. \u041d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0422\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 Python \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442. \u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u00abimport x\u00bb, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0436\u0435 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c.<\/p>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438: \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/h2>\n<p>  \u0418 \u043a\u0430\u043a \u0431\u043e\u043d\u0443\u0441, \u044f \u0434\u0430\u043c \u0432\u0430\u043c \u0441\u043d\u0438\u043f\u0435\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0433\u043e \u043b\u044e\u0431\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041c\u044b \u043e\u0431\u0435\u0440\u043d\u0443\u043b\u0438 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0412\u0441\u0435 \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f? \u0410\u0430\u0430, \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0432\u0435\u0441\u0435\u043b\u0438\u043c\u0441\u044f \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"python\"> def decorator_with_args(decorator_to_enhance):     &quot;&quot;&quot;      \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440.     \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a\u0436\u0435 \u0441\u0443\u0436\u0434\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0443.     \u0417\u0430\u0432\u0430\u0440\u0438\u0442\u0435 \u0441\u0435\u0431\u0435 \u0447\u0430\u0448\u0435\u0447\u043a\u0443 \u043a\u043e\u0444\u0435.     \u042d\u0442\u043e\u0442 \u0441\u043d\u0438\u043f\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043b\u044e\u0431\u043e\u043c\u0443 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0443 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432,     \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044f \u0432\u0430\u0441 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0442\u044c \u043c\u043e\u0437\u0433\u0438, \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f.     &quot;&quot;&quot;      # \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u0442\u0440\u044e\u043a, \u0447\u0442\u043e \u0438 \u0431\u044b\u043b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b     def decorator_maker(*args, **kwargs):          # \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430 \u043b\u0435\u0442\u0443 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e         # \u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 [\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0432\u043e\u0431\u0449\u0435\u043c]         def decorator_wrapper(func):              # \u041c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e,              # \u041e\u0411\u042b\u0427\u041d\u0410\u042f \u0424\u0423\u041d\u041a\u0426\u0418\u042f (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e).             # \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c: \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c ['specific signature'], \u0438\u043b\u0438 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:             return decorator_to_enhance(func, *args, **kwargs)          return decorator_wrapper      return decorator_maker <\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"python\"> # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440. \u0418 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0442\u0434\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 :-) # \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u044d\u0442\u043e &quot;decorator(func, *args, **kwargs)&quot; @decorator_with_args  def decorated_decorator(func, *args, **kwargs):      def wrapper(function_arg1, function_arg2):         print &quot;\u0414\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 &quot;, args, kwargs         return func(function_arg1, function_arg2)     return wrapper  # \u0417\u0430\u0442\u0435\u043c \u0432\u044b \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438\u043c \u043d\u043e\u0432\u044b\u043c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u043c.  @decorated_decorator(42, 404, 1024) def decorated_function(function_arg1, function_arg2):     print &quot;\u041f\u0440\u0438\u0432\u0435\u0442&quot;, function_arg1, function_arg2  decorated_function(&quot;\u0412\u0441\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0438&quot;, &quot;\u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0435&quot;) #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #\u0414\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 (42, 404, 1024) {} #\u0412\u0441\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0438 \u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0435  # \u0401-\u043c\u043e\u0451! <\/code><\/pre>\n<p>  \u042f \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u043b\u0438 \u0442\u043e\u0436\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u043e \u0447\u0442\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0444\u0440\u0430\u0437\u044b \u00ab\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e\u00bb. \u041d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432\u044b \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0435 \u043e\u0442 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e?<\/p>\n<h2>\u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/h2>\n<p>   \u2014 \u0418\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432 Python 2.4, \u0442\u0430\u043a \u0447\u0442\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u0448 \u043a\u043e\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.<br \/>   \u2014 \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u0435\u0440\u0436\u0438\u0442\u0435 \u044d\u0442\u043e \u0432 \u0443\u043c\u0435\u044e<br \/>   \u2014 \u0412\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u00ab\u0440\u0430\u0437\u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0445\u0430\u043a\u0438, \u0447\u0442\u043e \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u043d\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u0445. \u0422\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0434\u0435\u043a\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u044d\u0442\u043e \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430. \u041d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430.<br \/>   \u2014 \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0438\u0445 \u0434\u0435\u0431\u0430\u0433.<br \/>  Python 2.5 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043c\u043e\u0434\u0443\u043b\u044c functools, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 functools.wraps \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0438\u043c\u044f, \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u043e\u0439 \u00ab\u043e\u0431\u0435\u0440\u043d\u0443\u0442\u043e\u0439\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0435\u0435 \u043e\u0431\u0435\u0440\u0442\u043a\u0443. \u0417\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442, functools.wraps \u2014 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \ud83d\ude42<\/p>\n<pre><code class=\"python\"> # \u0414\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430 stacktrace [\u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430] \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0432\u0430\u043c __name__ \u0444\u0443\u043d\u043a\u0446\u0438\u0438 def foo():     print &quot;foo&quot;  print foo.__name__ #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: foo  # \u0421 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u043c    def bar(func):     def wrapper():         print &quot;bar&quot;         return func()     return wrapper  @bar def foo():     print &quot;foo&quot;  print foo.__name__ #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: wrapper  # &quot;functools&quot; \u043c\u043e\u0433\u0443\u0442 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0447\u044c  import functools  def bar(func):     # \u041c\u044b \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e &quot;wrapper&quot;, \u044d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 &quot;func&quot;     # \u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043c\u0430\u0433\u0438\u044f     @functools.wraps(func)     def wrapper():         print &quot;bar&quot;         return func()     return wrapper  @bar def foo():     print &quot;foo&quot;  print foo.__name__ #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: foo <\/code><\/pre>\n<h2>\u041a\u0430\u043a \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b?<\/h2>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u044f \u043c\u043e\u0433\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b? \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0443\u0442\u043e \u0438 \u043c\u043e\u0449\u043d\u043e, \u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0425\u043e\u0440\u043e\u0448\u043e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 1000 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435) \u0438\u043b\u0438 \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0434\u0435\u0431\u0430\u0433\u0438\u043d\u0433\u0430 (\u0432\u044b \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f). \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0438\u0445 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u043d\u043e\u0432\u043e, \u0440\u0430\u0434\u0438 DRY \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"python\"> def benchmark(func):     &quot;&quot;&quot;     \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438     \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f     &quot;&quot;&quot;     import time     def wrapper(*args, **kwargs):         t = time.clock()         res = func(*args, **kwargs)         print func.__name__, time.clock()-t         return res     return wrapper   def logging(func):     &quot;&quot;&quot;     \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.     (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u043e \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043b\u043e\u0433\u0438!)     &quot;&quot;&quot;     def wrapper(*args, **kwargs):         res = func(*args, **kwargs)         print func.__name__, args, kwargs         return res     return wrapper   def counter(func):     &quot;&quot;&quot;     \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f     &quot;&quot;&quot;     def wrapper(*args, **kwargs):         wrapper.count = wrapper.count + 1         res = func(*args, **kwargs)         print &quot;{0} \u0431\u044b\u043b(\u0430) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d(\u0430): {1} \u0440\u0430\u0437&quot;.format(func.__name__, wrapper.count)         return res     wrapper.count = 0     return wrapper  @counter @benchmark @logging def reverse_string(string):     return str(reversed(string))  [\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c!] print reverse_string(&quot;\u0410 \u043b\u0438\u0441, \u043e\u043d \u0443\u043c\u0451\u043d \u2014 \u043a\u0440\u044b\u0441\u0430 \u0441\u044b\u0440 \u043a \u043d\u0435\u043c\u0443 \u043d\u043e\u0441\u0438\u043b\u0430&quot;) print reverse_string(&quot;A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal: Panama!&quot;)  #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #reverse_string ('\u0410 \u043b\u0438\u0441, \u043e\u043d \u0443\u043c\u0451\u043d \u2014 \u043a\u0440\u044b\u0441\u0430 \u0441\u044b\u0440 \u043a \u043d\u0435\u043c\u0443 \u043d\u043e\u0441\u0438\u043b\u0430',) {} #wrapper 0.0 #wrapper \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d: 1 \u0440\u0430\u0437  #\u0430\u043b\u0438\u0441\u043e\u043d \u0443\u043c\u0435\u043d \u043a \u0440\u044b\u0441 \u0430\u0441\u044b\u0440\u043a - \u043d\u0451\u043c\u0443 \u043d\u043e ,\u0441\u0438\u043b \u0410 #reverse_string ('A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal: Panama!',) {} #wrapper 0.0 #wrapper has been used: 2x #!amanaP :lanac a ,noep a ,stah eros ,raj a ,hsac ,oloR a ,tur a ,mapS ,snip ,eperc a ,)lemac a ro( niaga gab ananab a ,gat a ,nat a ,gab ananab a ,gag a ,inoracam ,elacrep ,epins ,spam ,arutaroloc a ,shajar ,soreh ,atsap ,eonac a ,nalp a ,nam A <\/code><\/pre>\n<p>  \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u0443\u0433\u043e\u0434\u043d\u043e \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f. DRY \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438:<\/p>\n<pre><code class=\"python\"> @counter @benchmark @logging def get_random_futurama_quote():     import httplib     conn = httplib.HTTPConnection(&quot;slashdot.org:80&quot;)     conn.request(&quot;HEAD&quot;, &quot;\/index.html&quot;)     for key, value in conn.getresponse().getheaders():         if key.startswith(&quot;x-b&quot;) or key.startswith(&quot;x-f&quot;):             return value     return &quot;\u041d\u043e, \u044f \u043d\u0435 ... \u041d\u0415\u0415\u0422!&quot;  print get_random_futurama_quote() print get_random_futurama_quote()   #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: #get_random_futurama_quote () {} #wrapper 0.02 #wrapper \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d: 1 \u0440\u0430\u0437  #The laws of science be a harsh mistress. #get_random_futurama_quote () {} #wrapper 0.01 #wrapper \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d: 2 \u0440\u0430\u0437\u0430  #Curse you, merciful Poseidon!  # [\u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u044b\u0448\u0435 - \u044d\u0442\u043e \u0446\u0438\u0442\u0430\u0442\u044b \u0441 \u0441\u0430\u0439\u0442\u0430 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f # \u0447\u0435\u0440\u0435\u0437 httplib, \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0438\u0445 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c] <\/code><\/pre>\n<p>  \u0421\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 Python \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u043e\u0432: property, staticmethod, etc. Django \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432. Twisted \u043f\u043e\u0434\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0435 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/195266\/\"> http:\/\/habrahabr.ru\/post\/195266\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">       <i>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u042d\u0442\u043e \u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435. \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u0440\u0430\u0434\u0438 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f \u0438 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0442 \u0441 stackoverflow) \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e\u0439 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u2014 \u043e\u043d\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430. \u041e\u043d\u0430 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0438 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c \u043a\u0430\u043a \u0438 \u044f) \u043e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043a\u0430\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438 \u0443\u0442\u043e\u043b\u0438\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u0441\u0442\u0432\u043e.<br \/>  \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u0438\u0445 &quot;[..]&quot; \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u2014 \u044d\u0442\u043e \u043c\u043e\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434. \u041e\u0442\u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u043d\u0435\u0442. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445 \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435\u0436\u0435 \u043f\u043b\u043e\u0445, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u043d\u0430 \u0432\u0430\u0448\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<br \/>  \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<br \/>  <\/i><\/p>\n<h2>Python: \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/h2>\n<p>  \u0427\u0442\u043e \u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 python \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<pre><code class=\"python\">def shout(word=&quot;yes&quot;):     return word.capitalize()+&quot;!&quot;  print shout() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 'Yes!'  # \u0422\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u0446\u0438\u044f - \u043e\u0431\u044a\u0435\u043a\u0442, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442.  scream = shout  # \u041e\u0442\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043a\u043e\u0431\u043a\u0438: \u043c\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043c\u044b # \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;shout&quot; \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e &quot;scream&quot;.  # \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;shout&quot; \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 &quot;scream&quot;:  print scream() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 'Yes!'  # \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 'shout', \u0438 # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 'scream'  del shout try:     print shout() except NameError, e:     print e     #\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: &quot;name 'shout' is not defined&quot;  print scream() # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: 'Yes!' <\/code><\/pre>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-195266","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/195266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=195266"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/195266\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=195266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=195266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=195266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}