рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдорд╛рд░реНрдХ рд▓реБрдЯреНрдЬрд╝ рдХреА рд▓рд░реНрдирд┐рдВрдЧ рдкрд╛рдЗрдерди рдХрд┐рддрд╛рдм рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рдпрдерди рд╕реЗ рдкреНрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ред рднрд╛рд╖рд╛ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реИ, рдЗрд╕ рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдФрд░ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рд╕реБрдЦрдж рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдФрд░ рд╕рдВрдХрд▓рдХ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдореЙрдбреНрдпреВрд▓ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд╣реИ рдФрд░ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИред рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╡рд╛рд▓ рдереЗ рдЬреЛ рдореИрдВрдиреЗ рдзреНрдпрд╛рди рд╕реЗ рдЧреБрдЧрд▓реЗ рдФрд░ рд╣рд░ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдЦ рдПрдХ рд╢реБрд░реБрдЖрдд рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИред
рд╢рд░реНрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛
рд╢рд╛рдпрдж рдореИрдВ рдЙрди рд╢рдмреНрджреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдЕрдХреНрд╕рд░ рд╢реБрд░реБрдЖрдд рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕реВрдЪреА рдХреА рд╕рдордЭ рдпрд╛ рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕реВрдЪреА рдЬрдирд░реЗрдЯрд░ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ (рд▓реЗрдХрд┐рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬрдирд░реЗрдЯрд░ рдирд╣реАрдВ!) рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд╕рд╣рдордд рд╣реВрдБ, рд░реВрд╕реА рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рдорд╛рди рд▓рдЧрддрд╛ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ - рдЬрдирд░реЗрдЯрд░
рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ , рд╡рд┐рд╢реЗрд╖ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдЬреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рд╕реВрдЪреА рдирд╣реАрдВред рдЖрдЗрдП рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
f = (x for x in xrange(100))
рдпреЗ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдбрд┐рдЬрд╛рдЗрди рд╣реИрдВред рдкрд╣рд▓рд╛ рдПрдХ рдЬрдирд░реЗрдЯрд░ (рдпрд╛рдиреА рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд) рджреЗрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рд╣реИред
рдЬрдирд░реЗрдЯрд░ рдпрд╛ рдЬрдирд░реЗрдЯрд░ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЬрдирд░реЗрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд▓реМрдЯрд╛рдирд╛ рд╣реЛрдЧрд╛:
def prime(lst): for i in lst: if i % 2 == 0: yield i >>> f = prime([1,2,3,4,5,6,7]) >>> list(f) [2, 4, 6] >>> next(f) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
рд╡реИрд╕реЗ, рдкрд╛рдпрдерди 3.3 рдиреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдПрдХ рдирдИ рдЙрдкрдЬ рдкреЗрд╢ рдХреАред рдЙрдкрдЬ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рджреЛрдиреЛрдВ рдирд┐рд░реНрдорд╛рдг рдЧрдардмрдВрдзрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВред
def generator_range(first, last): for i in xrange(first, last): yield i def generator_range(first, last): yield from range(first, last)
рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИрдВ?
рдкреНрд░рд╕рдВрдЧ рдкреНрд░рдмрдВрдзрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВ рдЬреЛ рдПрдХ рдмрдпрд╛рди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХреЛрдб рдХреЗ рдмреНрд▓реЙрдХ рд╣реИрдВред рдмрдпрд╛рди рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдЦреБрд▓рд╛ () рдлрд╝рдВрдХреНрд╢рди рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рдзрдХреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рдпрдерди рдХреЙрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
fp = open("./file.txt", "w") fp.write("Hello, World") fp.close()
рд╣рд░ рдмрд╛рд░ рдмрдВрдж () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЦреБрд▓реЗ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмреНрд▓реЙрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛:
with open("./file.txt", "w") as fp: fp.write("Hello, World")
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдкреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдХрд░реАрдмреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдореЗрдВ, рдпрджрд┐ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рдФрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ __del__ рд╡рд┐рдзрд┐ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╕реНрддреБ рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрдн рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реЛрдВ:
In [4]: class Hello: ...: def __del__(self): ...: print 'destructor' ...: In [5]: f = Hello() In [6]: c = Hello() In [7]: e = Hello() In [8]: del e destructor In [9]: del c destructor In [10]: c = f In [11]: e = f In [12]: del f
рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд░реЗрдВрдЧреЗ:
In [1]: class Hello: ...: def __del__(self): ...: print u'' ...: def __enter__(self): ...: print u' ' ...: def __exit__(self, exp_type, exp_value, traceback): ...: print u' ' ...: In [2]: f = Hello() In [3]: c = f In [4]: e = f In [5]: d = f In [6]: del d In [7]: del e In [8]: del c In [9]: del f
рдЕрдм рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
In [10]: with Hello(): ....: print u' ' ....:
рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдмреНрд▓реЙрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдереАред
рдкреНрд░рд╕рдВрдЧ рдкреНрд░рдмрдВрдзрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЫреЛрдЯреЗ рд╣реИрд▓реЛ рдХреНрд▓рд╛рд╕ рд▓рд┐рдЦрдХрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХреА рд╣реИред рдЖрдЗрдП рдЕрдм рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: __enter__ рдФрд░ __exit__ред рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЛ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдХрдХреНрд╖рд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рдХрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж __exit__ рдкрджреНрдзрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рддреАрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ - exp_type, exp_value, рдФрд░ exp_trред рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдЙрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рджрдмрд╛ рджреЗрдВред
class Open(object): def __init__(self, file, flag): self.file = file self.flag = flag def __enter__(self): try: self.fp = open(self.file, self.flag) except IOError: self.fp = open(self.file, "w") return self.fp def __exit__(self, exp_type, exp_value, exp_tr): """ IOError """ if exp_type is IOError: self.fp.close()
рдЪрд░ exp_type рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рдерд╛ рдЬреЛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛, exp_value рдЕрдкрд╡рд╛рдж рд╕рдВрджреЗрд╢ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ IOError рдЕрдкрд╡рд╛рдж рдХреЛ рджрдмрд╛ рджреЗрддреЗ рд╣реИрдВ, рд╕рддреНрдп рдХреЛ __exit__ рд╡рд┐рдзрд┐ рдкрд░ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдмреНрд▓реЙрдХ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреНрд▓реЙрдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, self.fp.close () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдЬреЛ рднреА рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред рд╡реИрд╕реЗ, рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЕрдВрджрд░ рдЖрдк рдРрд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ NameError, SyntaxError, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рднреА рд╕рд░рд▓ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдорд╛рдирдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЖрддреА рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рд░рд┐рдлрд╝рд░рд▓рд┐рдм рдкреИрдХреЗрдЬ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдкреНрд░рд╕рдВрдЧрд╡рд╢ рдкреИрдХреЗрдЬ
рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рдирд╛, рдЕрд░реНрдерд╛рдд, __enter__ рдФрд░ __exit__ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрдирд╛, рдХрдард┐рди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рддреБрдЪреНрдЫ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрджреНрд░рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрднрдХрд░реНрддрд╛ () рдбреЗрдХреЛрд░реЗрдЯрд░, рдЬреЛ рдХрд┐ рд░рд┐рдлрд╝реНрд▓реЗрдм рдкреИрдХреЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рд╕рд╛рд░рдХ () рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
import contextlib @contextlib.contextmanager def context(): print u' ' try: yield {} except RuntimeError, err: print 'error: ', err finally: print u' '
рдХреЛрдб рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
In [8]: with context() as fp: ...: print u'' ...:
рдЪрд▓реЛ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
In [14]: with context() as value: ....: raise RuntimeError, 'Error' ....: error: Error In [15]:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрджрд░реНрднрди () рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рд╕рд╛рд░рдХ () рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг:
import contextlib @contextlib.contextmanager def bold_text(): print '<b>' yield
рдкрд░рд┐рдгрд╛рдо:
<b>Hello, World</b>
рд░реВрдмреА рдореЗрдВ рдмреНрд▓реЙрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдирд╛?
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрджрд░реНрдн рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
import contextlib @contextlib.contextmanager def context(name): print u' %s' % (name) yield name
рдкрд░рд┐рдгрд╛рдо:
рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрдн рджрд░реНрдЬ рдХрд░рдирд╛
рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рджреВрд╕рд░рд╛
рдкрд╣рд▓реЗ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░
рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░
рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░
рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдорд╛рди рдХреЛрдб:
first, second = context('first'), context('second') with first as first: with second as second: print u' %s %s' % (first, second)
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн ('рдкреНрд░рдердо') рдФрд░ рд╕рдВрджрд░реНрдн ('рджреВрд╕рд░реА') рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝ рдкрд╛рдПрдВрдЧреЗ рдЬреЛ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЙрдард╛рдП рдЧрдП рдереЗред рд╕рд╣рдордд рд╣реВрдВ, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ рдФрд░ рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди 2.7 рдФрд░ 3.1 рдореЗрдВ, рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:
with context('first') as first, context('second') as second: print u' %s %s' % (first, second)
рд░реЗрдВрдЬ рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ 2.7 рдФрд░ рдкрд╛рдпрдерди 3 рдореЗрдВ
рдкрд╛рдпрдерди 2.7 рд░реЗрдВрдЬ рдХреЛ рдПрдХ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрдореЛрд░реА рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо xrange рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ xrange рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рдореЗрдВ рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди 2.x рдореЗрдВ xrange рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореИрдВ рдереЛрдбрд╝рд╛ рд╣реИрд░рд╛рди рдерд╛ рдЬрдм рдмрдбрд╝реЗ рдорд╛рдиреЛрдВ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
>>> f = xrange(1000000000000000000000) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: Python int too large to convert to C long >>>
рдкрд╛рдпрдерди рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ int рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ C рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ 2.x рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ, рд╣рдо рдЗрд╕реЗ sys.maxsize рдХрдВрдЯреЗрдВрдЯ рдХреЛ рджреЗрдЦрдХрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
>>> import sys >>> sys.maxsize 9223372036854775807 >>>
рдпрд╣рд╛рдБ рдпрд╣ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╣реИ:
>>> import sys >>> sys.maxsize+1 9223372036854775808L >>>
рдкрд╛рдпрдерди рдиреЗ рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рд╣рдорд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд▓рдВрдмреЗ рдЗрдВрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдЕрдЧрд░ рдкрд╛рдпрдерди 2.x рдореЗрдВ xrange рдмрдбрд╝реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВред
рдкрд╛рдпрдерди 3.3 рдореЗрдВ, рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВ:
>>> import sys >>> sys.maxsize 9223372036854775807 >>> range(sys.maxsize+1) range(0, 9223372036854775808) >>>
рд▓рдВрдмреЗ рдЗрдВрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдХрд╛рд░рдг рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖред рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
>>> import sys >>> sys.maxsize + 1 9223372036854775808 >>> f = sys.maxsize + 1 >>> type(f) <class 'int'> >>>
рдкрд╛рдпрдерди 2.7 рдореЗрдВ
>>> import sys >>> type(sys.maxsize + 1) <type 'long'> >>>
рдХреБрдЫ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рдПрдХ рдЕрдЬрдЧрд░ рдХреА рд╕рд╛рджрдЧреА рдЙрд╕рдХреЗ рдЕрдзреНрдпрдпрди рдХреА рд╕рд╣рдЬрддрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдХреА рд╕рд╛рджрдЧреА рдореЗрдВ рд╣реА рд╣реИред рдкрд╛рдпрдерди рд╕реБрдВрджрд░, рд▓рдЪреАрд▓рд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕ рдкрд░ рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЕрдЬреАрдм рд▓рдЧрддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
>>> f = [[]] * 3 >>> f[0].append('a') >>> f[1].append('b') >>> f[2].append('c') >>>
рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдПрдХ рдЕрдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдбреЗрд╡рд▓рдкрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛: [[] a тАЩ], [bтАЩ], [c тАЩ]]ред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
>>> print f [['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']] >>>
рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧреБрдгрди рдСрдкрд░реЗрдЯрд░ рд╣рдорд╛рд░реА рд╕реВрдЪреА рдХреЗ рднреАрддрд░ рдПрдХ рд╣реА рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдереЛрдбрд╝рд╛ рдЬреЛрдбрд╝рдХрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
>>> c = [[], [], []] >>> hex(id(c[0])), hex(id(c[1])), hex(id(c[2])) ('0x104ede7e8', '0x104ede7a0', '0x104ede908') >>> >>> hex(id(f[0])), hex(id(f[1])), hex(id(f[2])) ('0x104ede710', '0x104ede710', '0x104ede710') >>>
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╛рдж рдХреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдмрджрд▓рд╛рд╡ рд▓рд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред
рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣рдмреНрд░ рдкрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЖрдЗрдП рд▓рд╛рдореНрдмрд╛ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рд╣рдо рд▓реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдВрдЧреЗ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдбрд╛рд▓реЗрдВрдЧреЗ:
>>> tmp = {} >>> for i in range(10): ... tmp[i] = lambda: i >>> tmp[0]() 9 >>> tmp[1]() 9 >>>
рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░, рд╡реИрд░рд┐рдПрдмрд▓ рдореИрдВ рдмрдВрдж рд╣реИ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рд▓реИрдореНрдмреНрдбрд╛ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдФрд░ рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрдИ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрдИ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рд▓реВрдк рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рднреА рд▓реИрдореНрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдорд╛рди рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рднреА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдЖрдИ -1 рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдВрдмрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдореИрдВ рдЪрд░:
>>> tmp = {} >>> for i in range(10): ... tmp[i] = lambda i = i: i >>> tmp[0]() 0 >>> tmp[1]() 1 >>>