рдЕрдЬрдЧрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд╛рдпрдерди рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ, рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ, рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╢рдмреНрджрд╛рд░реНрде рд╣реИред рдбрд╛рдпрдиреЗрдорд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмреАрдЖрд░рдкреАрдПрд╕ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреВрд▓ рдХрд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕) рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддреА рд╣реИрдВ, рд╕рд╛рде рд╣реА рдореМрдЬреВрджрд╛ рдШрдЯрдХреЛрдВ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдФрд░ рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЙрдбреНрдпреБрд▓реИрд░рд┐рдЯреА рдФрд░ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдЗрд╕ рднрд╛рд╖рд╛ рдХреЛ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рд╕рд░рд▓рддрд╛ рдФрд░ рд╕рд╣рдЬрддрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬреЛ рд▓реЛрдЧ рдЕрднреА рдкрд╛рдпрдерди рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ), рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреА рджреГрд╖реНрдЯрд┐ рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдХрдо рдЖрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рд▓реЗрдЦ рд╕реВрдХреНрд╖реНрдо, рдХрдард┐рди-рд╕реЗ-рдЦреЛрдЬрдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ "рд╢реАрд░реНрд╖ 10" рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЙрдиреНрдирдд рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░реНрд╕ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрд▓рддреА # 1: рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ
рдкрд╛рдпрдерди рдЖрдкрдХреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЙрдирдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рднрд╛рд╖рд╛ рдХреА рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреНрд░рд┐рдп рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЗрд╕ рдорд╛рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкрд░рд╕реНрдкрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
>>> def foo(bar=[]):
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдпрд╣ рд╣реИ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЗрд╕ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдорд╛рди рдХреЗ рдмрд┐рдирд╛ рд╣рд░ рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рд░-рдмрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдлреВ () (рдЬреЛ рдХрд┐ рдмрд╛рд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛) рдХреЙрд▓ рдХрд░рдХреЗ, рдпрд╣ рд╣рдореЗрд╢рд╛ "рдмрд╛рдЬ" рд▓реМрдЯрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдлреВ () рдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд░реНрдХ рдкрдЯреНрдЯреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП), рдмрд╛рд░ [] (рдЬреЛ рдХрд┐ рдПрдХ рдирдИ рдЦрд╛рд▓реА рд╕реВрдЪреА рд╣реИ) рдкрд░ рд╕реЗрдЯ рд╣реИред
рд▓реЗрдХрд┐рди рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
>>> foo() ["baz"] >>> foo() ["baz", "baz"] >>> foo() ["baz", "baz", "baz"]
рдФрд░? рд╣рд░ рдмрд╛рд░ рдирдИ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдлреЛрд▓ () рдХреЛ рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди "рдмрд╛рдЬ" рдХреНрдпреЛрдВ рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ?
рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм "рд╣реБрдб рдХреЗ рддрд╣рдд" рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреА рдЧрд╣рд░реА рд╕рдордЭ рд╣реЛрдЧреАред рдЕрд░реНрдерд╛рддреН: рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рджреМрд░рд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрд╛рд░ рддрд░реНрдХ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА) рдХреЗрд╡рд▓ рдЬрдм foo () рдкрд╣рд▓реА рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдлреВ () рдХреЗ рд▓рд┐рдП рдХреЙрд▓ (рдпрд╛рдиреА рдмрд╛рд░ рддрд░реНрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛) рдЙрд╕реА рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдЬреЛ рдерд╛ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рдордп рддрд░реНрдХ рдкрдЯреНрдЯреА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред
рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп "рд╕рдорд╛рдзрд╛рди" рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ:
>>> def foo(bar=None): ... if bar is None:
рдЧрд▓рддреА # 2: рд╡рд░реНрдЧ рдЪрд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
>>> class A(object): ... x = 1 ... >>> class B(A): ... pass ... >>> class C(A): ... pass ... >>> print Ax, Bx, Cx 1 1 1
рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИред
>>> Bx = 2 >>> print Ax, Bx, Cx 1 2 1
рд╣рд╛рдБ, рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдерд╛ред
>>> Ax = 3 >>> print Ax, Bx, Cx 3 2 3
рдпреЗ рдХреНрдпрд╛!? рд╣рдордиреЗ рд╕рд┐рд░реНрдл Ax рдХреЛ рдмрджрд▓рд╛ рд╣реИред Cx рдХреЛ рднреА рдХреНрдпреЛрдВ рдмрджрд▓рд╛?
рдкрд╛рдпрдерди рдореЗрдВ, рд╡рд░реНрдЧ рдЪрд░ рдХреЛ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рд╡рд┐рдзрд┐ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдСрд░реНрдбрд░ (MRO) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдЪреВрдВрдХрд┐ x рд╡рд┐рд╢реЗрд╖рддрд╛ C рд╡рд░реНрдЧ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреЗрд╡рд▓ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ A, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╛рдпрдерди рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ)ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, C рдХреА рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ x рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, Cx рдХреЗ рд╕рдВрджрд░реНрдн рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдХреЗ рд╕рдВрджрд░реНрдн рд╣реИрдВред рдЗрд╕рд╕реЗ рдпрджрд┐ рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди рд╕реАрдЦрддреЗ рд╕рдордп, рдХреНрд▓рд╛рд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВред
рдЧрд▓рддреА рдирдВрдмрд░ 3: рдЕрдкрд╡рд╛рдж рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИ:
>>> try: ... l = ["a", "b"] ... int(l[2]) ... except ValueError, IndexError:
рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдмрд▓реНрдХрд┐, рдкрд╛рдпрдерди 2.x рдореЗрдВ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдИ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреВрд╕рд░реЗ рджрд┐рдП рдЧрдП рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдИ) рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЖрдЧреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдПрдХ IndexError рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдкрд╡рд╛рдж рдХрдерди рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрдкрд╡рд╛рдж рдЗрдВрдбреЗрдХреНрд╕рдПрд░реНрд░рд░ рдирд╛рдордХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдмрдВрдзрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдЕрдкрд╡рд╛рдж рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрдИ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЙрди рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд╛рдпрдерди 2 рдФрд░ рдкрд╛рдпрдерди 3 рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ:
>>> try: ... l = ["a", "b"] ... int(l[2]) ... except (ValueError, IndexError) as e: ... pass ... >>>
рдЧрд▓рддреА # 4: рдкрд╛рдпрдерди рдЧреБрдВрдЬрд╛рдЗрд╢ рдирд┐рдпрдореЛрдВ рдХреА рдЧрд▓рддрдлрд╣рдореА
рдкрд╛рдпрдерди рдореЗрдВ рдЧреБрдВрдЬрд╛рдЗрд╢ рддрдерд╛рдХрдерд┐рдд рд▓реЗрдЧрдмреА рдирд┐рдпрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИ (рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди (рдбрд┐рдл рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реМрдВрдкреЗ рдЧрдП рдирд╛рдо), рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ (рдлрд╝рдВрдХреНрд╢рди рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдиреАрдп рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╛рдо) рдбрд┐рдл рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛), рдЗрдВрдЯрд░рдирд▓ рд╕реЗ рдПрдХреНрд╕рдЯрд░реНрдирд▓), рдЧреНрд▓реЛрдмрд▓ (рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд╕реМрдВрдкреЗ рдЧрдП рдирд╛рдо, рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдбреАрдПрдПрдо рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ), рдмрд┐рд▓реНрдЯ-рдЗрди (рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдирд╛рдо рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо: рдУрдкрди, рд░реЗрдВрдЬ) SyntaxError, ...)ред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдЦреИрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рдпрдерди рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рд╛рдорд╛рдиреНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
>>> x = 10 >>> def foo(): ... x += 1 ... print x ... >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in foo UnboundLocalError: local variable 'x' referenced before assignment
рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЪрд░ рдХреЛ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рдпрдерди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рджрд╛рдпрд░реЗ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЛ рдХрд┐рд╕реА рднреА рдореВрд▓ рджрд╛рдпрд░реЗ рдореЗрдВ рдЙрд╕реА рдирд╛рдо рд╕реЗ рдЫреБрдкрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдИ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдХреЛрдб рдореЗрдВ UnboundLocalError рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдХрд╣реАрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
>>> lst = [1, 2, 3] >>> def foo1(): ... lst.append(5)
рдФрд░? Foo1 рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ foo1 рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЙрддреНрддрд░ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди, рд▓реЛрдХрдкреНрд░рд┐рдп рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рд╣реИред foo1 рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ lst рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ foo2 рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ lst + = [5] рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ lst = lst + [5] рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реИ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдореВрд▓реНрдп lst (рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ) рдорд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрд┐рд╕ рдореВрд▓реНрдп рдХреЛ рд╣рдо lst рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ lst рдкрд░ рд╣реА рдЖрдзрд╛рд░рд┐рдд рд╣реИ (рдлрд┐рд░ рд╕реЗ, рдЗрд╕реЗ рдЕрдм рд╕реНрдерд╛рдиреАрдп рджрд╛рдпрд░реЗ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЬреЛ рдЕрднреА рддрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред
рдЧрд▓рддреА # 5: рдЗрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╕реВрдЪреА рдмрджрд▓рдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
>>> odd = lambda x : bool(x % 2) >>> numbers = [n for n in range(10)] >>> for i in range(len(numbers)): ... if odd(numbers[i]): ... del numbers[i]
рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд╕реВрдЪреА рдпрд╛ рд╕рд░рдгреА рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдЙрд╕ рдкрд░ рдирд┐рдХрд╛рд▓рдирд╛ рдПрдХ рдкрд╛рдпрдерди рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЕрдиреБрднрд╡реА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рд░реЗрдХ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЛрдб рдореЗрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкрд╛рдпрдерди рдореЗрдВ рдХрдИ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдареАрдХ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░, рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рд╕рд░рд▓реАрдХрд░рдг рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрдЦрдж рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░рд▓ рдХреЛрдб рдореЗрдВ рдЧрд▓рддреА рд╕реЗ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЧрд▓рддреА рд╕реЗ рдЙрд╕ рдкрд░ рдЧрд┐рд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдРрд╕рд╛ рд╣реА рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рдордЭрдирд╛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рдЗрд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
>>> odd = lambda x : bool(x % 2) >>> numbers = [n for n in range(10)] >>> numbers[:] = [n for n in numbers if not odd(n)]
рдЧрд▓рддреА # 6: рдЧрд▓рддрдлрд╣рдореА рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ рдмрдВрдж рдореЗрдВ рдЪрд░ рдХреИрд╕реЗ рдмрд╛рдВрдзрддрд╛ рд╣реИ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
>>> def create_multipliers(): ... return [lambda x : i * x for i in range(5)] >>> for multiplier in create_multipliers(): ... print multiplier(2) ...
рдЖрдк рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
0 2 4 6 8
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:
8 8 8 8 8
рдЖрд╢реНрдЪрд░реНрдп!
рдпрд╣ рдкрд╛рдпрдерди рдореЗрдВ рджреЗрд░ рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдЬрдм рднреА рд▓реМрдЯрд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдЖрд╕рдкрд╛рд╕ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдореВрд▓реНрдп рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ (рдФрд░ рдЙрд╕ рд╕рдордп рддрдХ рдЪрдХреНрд░ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ - рдореВрд▓реНрдп 4) ред
рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЕрдЬрдЧрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛:
>>> def create_multipliers(): ... return [lambda x, i=i : i * x for i in range(5)] ... >>> for multiplier in create_multipliers(): ... print multiplier(2) ... 0 2 4 6 8
рджреЗрдЦрд╛! рд╣рдо рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХрд╣реЗрдВрдЧреЗред рдХреБрдЫ рд╣реИрдВ
рдкрддрд▓реАред рдХреБрдЫ рд▓реЛрдЧ рдЗрди рдЪреАрдЬреЛрдВ рд╕реЗ рдирдлрд░рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдкрд╛рдЗрдерди рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рддреЛ рднреА, рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЧрд▓рддреА # 7: рдЪрдХреНрд░реАрдп рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдкреИрджрд╛ рдХрд░рдирд╛
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдПрдХ-рдмреАрдбреАрдУ рдФрд░ рдПрдХ-рдПрдХ рдмреАрдбреАрдУ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рджреВрд╕рд░реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдерд┐рдВрдХрдкреИрдб рдореЗрдВ:
import b def f(): return bx print f()
B.py
import a x = 1 def g(): print af()
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, a Oracle рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
>>> import a 1
рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдореЙрдбреНрдпреВрд▓ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?
рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЪрдХреНрд░реАрдп рдЖрдпрд╛рдд рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкрд╛рдпрдерди рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрд╛рдпрдерди рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдпрд╛ рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓реМрдЯрддреЗ рд╕рдордп, рдЬрдм рд╣рдордиреЗ рдерд┐рдВрдХрдкреИрдб рдХреЛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдЙрд╕реЗ рдмреАрдбреЛрдореЛ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдмреА-рдереНрд░реЛ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЖрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рднреА рдСрд░реЗрдХрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред B.py a рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдВрджрд░реНрдн a af to () рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЙрд▓ g () рдореЗрдВ рд╣реИ рдФрд░ an.py рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо b.py?
>>> import b Traceback (most recent call last): File "<stdin>", line 1, in <module> File "b.py", line 1, in <module> import a File "a.py", line 6, in <module> print f() File "a.py", line 4, in f return bx AttributeError: 'module' object has no attribute 'x'
рдУрд╣, рдУрд╣ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ! рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ b.py рдХреЗ import рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдпрд╣ a.py рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ f () рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ bx рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди bx рдХреЛ рдЕрднреА рддрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдПрдЯрд┐рдЯреНрдпреВрдб рдЕрдкрд╡рд╛рдж рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рддреБрдЪреНрдЫ рд╣реИред рдмрд╕ g.py рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ () рдореЗрдВ:
x = 1 def g(): import a
рдЕрдм рдЬрдм рд╣рдо рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ:
>>> import b >>> bg() 1
рдЧрд▓рддреА # 8: рдкрд╛рдпрдерди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдо рдХрд╛рдЯрдирд╛
рдкрд╛рдпрдерди рдХреЗ рдЖрдХрд░реНрд╖рдг рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХреЗ рдХрдИ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЖрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдЖрдк рд╣реЛрд╢рдкреВрд░реНрд╡рдХ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ email.py, рдЬреЛ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдЧрд╛)ред
рдЗрд╕рд╕реЗ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рднреА рдореЙрдбреНрдпреВрд▓ рдкрд╛рдпрдерди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рд╡рд╛рд▓рд╛ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрдЬрд╛рдп рдЧрд▓рддреА рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдзреНрдпрд╛рди рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд╛рдпрдерди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдорд╛рди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдореЛрджрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рдЧрд▓рддреА # 9: рдкрд╛рдпрдерди 2 рдФрд░ рдкрд╛рдпрдерди 3 рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд foo.py рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
import sys def bar(i): if i == 1: raise KeyError(1) if i == 2: raise ValueError(2) def bad(): e = None try: bar(int(sys.argv[1])) except KeyError as e: print('key error') except ValueError as e: print('value error') print(e) bad()
рдЕрдЬрдЧрд░ 2 рдкрд░, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
$ python foo.py 1 key error 1 $ python foo.py 2 value error 2
рд▓реЗрдХрд┐рди рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди 3 рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
$ python3 foo.py 1 key error Traceback (most recent call last): File "foo.py", line 19, in <module> bad() File "foo.py", line 17, in bad print(e) UnboundLocalError: local variable 'e' referenced before assignment
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ? "рд╕рдорд╕реНрдпрд╛" рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди 3 рдореЗрдВ, рдЕрдкрд╡рд╛рдж рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЛрдИ рд╡рд╕реНрддреБ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред (рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рд╢реБрд░реВ рди рд╣реЛ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдЙрдирдХреЗ рд╕рдВрджрд░реНрдн рд╣рдЯрд╛ рджреЗрдВ)ред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдЕрдкрд╡рд╛рдж рдмреНрд▓реЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд░рдЦрдирд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЙрдкрд▓рдмреНрдз рд░рд╣реЗред рдпрд╣рд╛рдВ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкрд╛рдпрдерди 2 рдФрд░ рдкрд╛рдпрдерди 3 рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ:
import sys def bar(i): if i == 1: raise KeyError(1) if i == 2: raise ValueError(2) def good(): exception = None try: bar(int(sys.argv[1])) except KeyError as e: exception = e print('key error') except ValueError as e: exception = e print('value error') print(exception) good()
рдЗрд╕реЗ рдкрд╛рдпрдерди 3 рдореЗрдВ рдЪрд▓рд╛рдПрдВ:
$ python3 foo.py 1 key error 1 $ python3 foo.py 2 value error 2
URAAAA!
рдЧрд▓рддреА # 10: __del__ рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдПрдХ mod.py рдлрд╝рд╛рдЗрд▓ рд╣реИ:
import foo class Bar(object): ... def __del__(self): foo.cleanup(self.myhandle)
рдФрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ рдФрд░ рджреВрд╕рд░реЗ_рдореЙрдбреЛрд░рд╛ рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
import mod mybar = mod.Bar()
рдФрд░ рдПрдХ рднрдпрд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛
рд╣реИ , рдЬрдм рджреБрднрд╛рд╖рд┐рдпрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЙрдбреНрдпреВрд▓ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕рднреА рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм __del__ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдирд╛рдо рдлреВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ "рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде" рд╕рдорд╛рдзрд╛рди atexit.register () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдЬрдм рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ), рджреБрднрд╛рд╖рд┐рдпрд╛ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рд╣реИрдВрдбрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЙрдкрд░реЛрдХреНрдд mod.py code рдХреЗ рд▓рд┐рдП fix рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
import foo import atexit def cleanup(handle): foo.cleanup(handle) class Bar(object): def __init__(self): ... atexit.register(cleanup, self.myhandle)
рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдлрд╛рдИ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣реБрдИ рд╡рд╕реНрддреБ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдП, рдЗрд╕рдХрд╛ рдирд┐рд░реНрдгрдпред рдирд╛рдорд╣реИрдВрдбрд▓ рдирд╛рдо foo.cleanup рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдкрд╛рдпрдерди рдХрдИ рддрдВрддреНрд░реЛрдВ рдФрд░ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд▓рдЪреАрд▓реА рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐рд╕реА рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреВрд▓ рдпрд╛ рднрд╛рд╖рд╛ рдХреА рддрд░рд╣, рд╕реАрдорд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдпрд╛ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд╕рд╛рде, рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкрд╛рдпрдерди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрдп рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрддреЗ рд╣реБрдП рднрд╛рд╖рд╛ рдХреЗ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред