рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдиреЛрдЯ:
рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ рд╡реЗрд░реНрдХреЗрдЬрдЧ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ, рдЬрд┐рдВрдЬрд╛ 2 рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд▓реЗрдЦрдХ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рд╕рд┐рджреНрдз рдЕрдЬрдЧрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд░реНрддрдорд╛рди рддрдХрдиреАрдХреЛрдВ рдФрд░ рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЯрд┐рдкреНрдкрдгреАред рдпрд╣ рдЖрд░реНрдорд┐рди рдХреЗ 2010 рдХреЗ рд▓реЗрдЦ "рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЯреВ рдкрд╛рдЗрдерди 3. рдП рдЧрд╛рдЗрдб" рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ 2to3 рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЖрдЬ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдВрдЯреАрдкреИрдЯрд░реНрди рд╣реЛрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдУрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛рдлрд╝реА рдмрд┐рдЧрдбрд╝рддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИредрдПрдХ рдмрд╣реБрдд рд╣реА рджрд░реНрджрдирд╛рдХ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рдж рддреАрд╕рд░реЗ рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрдЬрд╛ 2 рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдирд╛, рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг 3 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбрд░ рдЧрдпрд╛ рдерд╛ред рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЙрд╕рдореЗрдВ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг 2 рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдФрд░ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди 2to3 рд╕реЗ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рдерд╛ред рд╕рдмрд╕реЗ рдЕрдкреНрд░рд┐рдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдпрд╣ рдерд╛ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рдорд┐рдирдЯ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЧрддрд┐ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдЬрдЧрд░ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рддреЗрдЬ рд╣реИред
рдореЛрдЗрдирдореЙрдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдереЙрдорд╕ рд╡реЛрд▓реНрдбрдореИрди рдиреЗ рдЕрдкрдиреЗ
рдЕрдЬрдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд┐рдирдЬрд╛ 2 рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ рд╕рд╣реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде
рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╣реА рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдЬреЛ 2.6, 2.7 рдФрд░ 3.3 рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЫреЛрдЯреЗ tidbits рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЖрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдЬреЛ рдЕрдЬрдЧрд░ рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдЬрдЧрд░ рдХреЛрдб рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВ рдХрдИ рдмрд╛рд░ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрдпрд╛ рдФрд░ рд╕рдВрдпреБрдХреНрдд рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рдпреБрдХреНрддрд┐рдпреЛрдВ рдФрд░ рддрд░рдХреАрдмреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реВрдБрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред
рд╕рдорд░реНрдерди 2.5, 3.1 рдФрд░ 3.2 рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрдВ
рдпрд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдЭрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдЬрдЧрд░ 2.5 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдЖрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред 3.1 рдФрд░ 3.2 рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдХреА рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдПред рд▓реЗрдХрд┐рди рдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, 2.6 рдФрд░ 3.3 рдореЗрдВ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдорд╛рди рдХреЛрдб рдХреЛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ:
- рд╕рдВрдЧрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХред 2.6 рдФрд░ 3.3 рддрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП
'foo'
(2.x рдореЗрдВ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ 3.x рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕), рдФрд░ u'foo'
рдХреЛ рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ b'foo'
рд▓рд┐рдП рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдпрд╛ рдмрд╛рдЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рд╕рдВрдЧрдд
print
рд╕рд┐рдВрдЯреИрдХреНрд╕ред рдпрджрд┐ рдЖрдк from __future__ import print_function
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЖрд╡рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рдЕрд╕рдВрдЧрддрддрд╛рдУрдВ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд┐рдирд╛, from __future__ import print_function
рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ print
рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рд╕рдВрдЧрдд рдХрдмреНрдЬрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред Python 2.6 рдПрдХреНрд╕ рдХреЗ
except Exception as e
рдПрдХ рдирдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 3.x рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред - рд╡рд░реНрдЧ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╡реЗ рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдирд┐рд╢рд╛рди рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдЕрдЬрдЧрд░
__unicode__
рдореЗрдВ __next__
, рдпрд╛ __next__
рд╕реЗ __next__
next
рдПрдХ рд╡рд┐рдзрд┐ рдирд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╛рдо рдмрджрд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди
next()
next
рдпрд╛ __next__
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдзреА рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд░рдирдЯрд╛рдЗрдо рдЪреЗрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрд╡рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред - рдкрд╛рдпрдерди 2.6 рдореЗрдВ, 3.3 рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛
bytearray
рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдмрдХрд┐ рдЕрдЬрдЧрд░ 2.6 рдореЗрдВ bytes
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рд╣реА рдирд╛рдо рд╣реИ, рдЬреЛ str
рдХрд╛ рдкрд░реНрдпрд╛рдп рд╣реИ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред - рдкрд╛рдпрдерди 3.3 рдореЗрдВ, рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреЛрдб 3.1 рдФрд░ 3.2 рдореЗрдВ рдЯреВрдЯ рдЧрдП рдереЗред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдирдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдХреЛрдИ рдЙрдкрдирд╛рдо рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдкрд╣рд▓реЗ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ 2.x рдореЗрдВ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░реАрдо-рдЖрдзрд╛рд░рд┐рдд рдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ 3.0 рд╕реЗ 3.3 рддрдХ рдкреВрд░реА рддрд░рд╣ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдереАред
рд╣рд╛рдВ,
рдЫрд╣ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдХрдо рди рд╕рдордЭреЗрдВред рдореИрдВ рдХреЙрд░реА рдиреЗ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдЬрд┐рдирдЬрд╛ 2 рдХреЛ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рдЦреЛ рджреА, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрд╕рдХреЗ рдХреЛрдб рд╕реЗ рднрдпрднреАрдд рдерд╛ред рдЙрд╕ рд╕рдордп, рд╕рдВрдпреБрдХреНрдд рдХреЛрдб рдмрджрд╕реВрд░рдд рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрдбрд╝рд╛ (рд▓рдЧрд╛рддрд╛рд░
six.b('foo')
рдФрд░
six.u('foo')
), рдпрд╛ рдЗрд╕рдХреА рдХрдо рдЧрддрд┐ 2to3 рдереАред рдЕрдм, рдпрд╣ рд╕рдм рдирд┐рдкрдЯрд╛ рдХрд░, рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЖрдирдВрдж рд▓реЗрддрд╛ рд╣реВрдВред Jinja2 рдХреЛрдб рдмрд╣реБрдд рд╕рд╛рдл рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдЬрдЧрд░ 2 рдФрд░ 3 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рддрд╛ рд╕рдорд░реНрдерди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ред
if PY2:
рдХреА рд╢реИрд▓реА рдореЗрдВ рдХреБрдЫ рд╣реА рдХреЛрдб рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рдХрд░рддреЗ рд╣реИрдВ
if PY2:
рд╢реЗрд╖ рд▓реЗрдЦ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдЬрдЧрд░ рдХреЗ рдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг 2.5 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИрдВ рдФрд░ рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЙрдирд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдорд░реНрдерди 3.2 рд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдЕрдкрдиреА рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рдЬреЛ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдЫрд╣ рдХреЛ рдЫреЛрдбрд╝ рджреЛ
рдЫрд╣ рдПрдХ рдмрд╣реБрдд рд╕рд╛рдл-рд╕реБрдерд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдФрд░ рдЬрд┐рдВрдЬрд╛ 2 рдиреЗ рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдХреАред рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЧрд┐рдирддреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЫрд╣ рдХреЗ рдкрд╛рд╕ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдХреЗ рддрд╣рдд рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреА рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рдпрджрд┐ рдЖрдк рдкрд╛рдпрдерди 2.5 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЫрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди 2.6 рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, рдЫрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИрдВред Jinja2 рдореЗрдВ
_compat рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред рдкрд╛рдпрдерди 3 рдореЗрдВ рдирд╣реАрдВ рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП, рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧрддрддрд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдб рдХреА 80 рд╕реЗ рдХрдо рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░рдг рдкреИрдХреЗрдЬ рдЫрд╣ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╢реБрд░реБрдЖрдд рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рд╕реЗ рдХрд░реЗрдВ
рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдкрд╛рдпрдерди-рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рдПрдХ рдЕрдЪреНрдЫреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдпрд╣ 2to3 рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдЬрдЧрд░ рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдмрдЧ рд╣реИрдВ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдЖрдкрдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдмрд╛рдК рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрднреА рднреА рдХреЛрдб рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдЫ рдЖрдпрд╛рдд рдФрд░ рдЦреБрд░рджрд░реЗрдкрди рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд╕рд╣реА рдХрд░реЗрдВ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХреБрдЫ рдФрд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рднреА рдЕрдкрдирд╛ рдЕрд░реНрде рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИред рдорд╛рдирдХ рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ 3.0 рдФрд░ 3.1 рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рдЕрдирдЬрд╛рдиреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджрд┐рдЦрд╛рдИ рджреАрдВред
рдПрдХ рд╕рдВрдЧрддрддрд╛ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреЗрдВ
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЫрд╣ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рд╣реА рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрдЧрддрддрд╛ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЫреЛрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧрддрддрд╛ рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
import sys PY2 = sys.version_info[0] == 2 if not PY2: text_type = str string_types = (str,) unichr = chr else: text_type = unicode string_types = (str, unicode) unichr = unichr
рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдб рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред рдЬрд┐рдирдЬрд╛ 2 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдХрдИ рдХрд╛рд░реНрдп рдХрд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, itilools рд╕реЗ ifilter,
imap рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ 3.x рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдП рд╣реИрдВ (рдореИрдВ 2.x рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдкрд╛рдардХ рдХреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХреЗ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ )ред
2.x рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ, 3.x рдирд╣реАрдВ
рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рдЕрдЬрдЧрд░ рдХреЗ 2.x рдпрд╛ 3.x рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдФрд░ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪреЗрдХ рдХреЛ рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рди рдХрд┐ рдХреЛрдХрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХрдо рдЕрдкреНрд░рд┐рдп рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдЬрдм рдЕрдЬрдЧрд░ рдХрд╛ 4 рд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдЕрдЪреНрдЫрд╛:
if PY2: def __str__(self): return self.__unicode__().encode('utf-8')
рдЗрддрдирд╛ рд╕рд╣реА рдирд╣реАрдВ:
if not PY3: def __str__(self): return self.__unicode__().encode('utf-8')
рд▓рд╛рдЗрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкрд░рд┐рд╡рд░реНрддрди, рдПрдХ рд╢рдХ рдХреЗ рдмрд┐рдирд╛, рдпреВрдирд┐рдХреЛрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдерд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рджрд░реНрджрдирд╛рдХ рдереЗ рдФрд░ рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╡реНрдпрддреАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА рд╣реИ рдЬреЛ рдЬрд┐рдВрдЬрд╛ 2 рдФрд░ рд╡рд░реНрдХрд░реНрдЬрд╝реБрдЧ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:
рдЗрди рд╕рд░рд▓ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореИрдВрдиреЗ рдЪрд░ рднреА рдЬреЛрдбрд╝реЗ:
text_type
,
unichr
рдФрд░
string_types
рдХреЛ рдореЗрд░реЗ рдЕрдиреБрдХреВрд▓рддрд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрди рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВ:
isinstance(x, basestring)
isinstance(x, string_types)
рдмрди рдЬрд╛рддрд╛ рд╣реИ isinstance(x, string_types)
isinstance(x, unicode)
isinstance(x, text_type)
рдмрди рдЬрд╛рддрд╛ рд╣реИ isinstance(x, text_type)
isinstance(x, str)
рдпрджрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдпрд╣ isinstance(x, bytes)
, рдпрд╛ isinstance(x, (bytes, bytearray))
рдореИрдВрдиреЗ рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░
__unicode__
рднреА рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ
__unicode__
рдпрд╛
__unicode__
рд╕рд╛рде рдХрдХреНрд╖рд╛рдПрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:
if PY2: def implements_to_string(cls): cls.__unicode__ = cls.__str__ cls.__str__ = lambda x: x.__unicode__().encode('utf-8') return cls else: implements_to_string = lambda x: x
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ 2.x рдФрд░ 3.x рджреЛрдиреЛрдВ рдореЗрдВ
__str__
рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╣рд╛рдБ, рдпрд╣ 2.x рдореЗрдВ рдХреБрдЫ рднрджреНрджрд╛ рджрд┐рдЦрддрд╛ рд╣реИ), рдФрд░ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕реНрд╡рддрдГ рд╣реА рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░
__unicode__
рд╕реЗ 2.x рдХрд░ рджреЗрдЧрд╛ред , рдФрд░
__unicode__
рдЬреЛрдбрд╝реЗрдВ рдЬреЛ
__unicode__
рдХреЙрд▓
__unicode__
рдФрд░ utf-8 рдХреЛ рдЗрд╕рдХреА рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо
__unicode__
ред 2.x рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд░рд╣рд╛ рд╣реИред рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ Jinja2 рдпрд╛ Djangoред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
@implements_to_string class User(object): def __init__(self, username): self.username = username def __str__(self): return self.username
рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдкрд░рд┐рд╡рд░реНрддрди
рдЪреВрдБрдХрд┐ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЫрд╣ рдореЗрдВ рдПрдХ
with_metaclass
рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рдПрдХ рдЦрд╛рд▓реА рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдЬрд┐рдиреНрдЬрд╛ 2 рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред рдмрд╛рд╣рд░реА API рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдореЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдлрд╛рдпрджреЗ рдпрд╣ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдкреЗрдбрд╝ рд╕рд╛рдл рд░рд╣рддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рдХреЛрдб рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреНрд░рд╛рдордХ рд╣реИред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдХрдХреНрд╖рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд╛рд░рд┐рд╕ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╡реГрдХреНрд╖ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЦрд╛рд▓реА рдореЗрдЯрд╛рд╕реЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдЦрд╛рд▓реА рдХреНрд▓рд╛рд╕ рдХреА рдореЗрдЯрд╛рдХреНрд▓рд╕ рдореЗрдВ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдирдИ рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдореЗрдЯрд╛рдХреНрд▓рд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
(рдзреНрдпрд╛рди рджреЗрдВ: рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИ - рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддреЗ рд╣реИрдВ) ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЦрд╛рд▓реА рд╡рд░реНрдЧ рдФрд░ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХрднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
def with_metaclass(meta, *bases): class metaclass(meta): __call__ = type.__call__ __init__ = type.__init__ def __new__(cls, name, this_bases, d): if this_bases is None: return type.__new__(cls, name, (), d) return meta(name, bases, d) return metaclass('temporary_class', None, {}) And here is how you use it: class BaseForm(object): pass class FormType(type): pass class Form(with_metaclass(FormType, BaseForm)): pass
рд╢рдмреНрджрдХреЛрд╢реЛрдВ
рддреАрд╕рд░реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдерд╛ред рджреВрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ, рд╕рднреА рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдереАрдВ:
keys()
,
values()
рдФрд░
items()
, рдЬреЛ рд╕реВрдЪрд┐рдпрд╛рдБ рд▓реМрдЯрд╛ рджреА
iterkeys()
, рдФрд░
iterkeys()
,
itervalues()
рдФрд░
iteritems()
, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ
iteritems()
рд▓реМрдЯрд╛
iteritems()
ред рддреАрд╕рд░реЗ рдЕрдЬрдЧрд░ рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдЙрди рддрд░реАрдХреЛрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
keys()
рдПрдХ рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реЗрдЯ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ,
values()
рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реАрдб-рдУрдирд▓реА рдХреНрд╖рдорддрд╛ (рд▓реЗрдХрд┐рди рдЗрдЯреНрд░реЗрдЯрд░ рдирд╣реАрдВ!) рдФрд░
items()
рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реЗрдЯ рдХреЗ рд╕рдорд╛рди рджреЗрддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рд╕реЗрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреА рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ рддреЛ рдХреБрдЫ рддрд░реАрдХреЗ рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЛрдЧ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Werkzeug рдФрд░ Django рдЕрдкрдиреА рдЦреБрдж рдХреА рд╢рдмреНрджрдХреЛрд╢ рдЬреИрд╕реА рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдерд╛ рдФрд░
keys()
рдФрд░ рдЙрд╕рдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕
keys()
рджреЗрдирд╛ рдерд╛ред
рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рдЙрди рд╕реАрдорд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╣реИ рдЬреЛ рдЕрдЬрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдкреНрд░рддрд┐ рд╡реНрдпрдХреНрддрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдХреЗ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢рдмреНрджрдХреЛрд╢ рджреГрд╢реНрдп рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░, рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╢реБрджреНрдз рдЕрдЬрдЧрд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- 3.x рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ 2.x рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛрдб рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдорддрд▓рдм рд╣реЛрдЧрд╛ред
рдпрд╣рд╛рдБ рд╣реИ рдХреНрдпрд╛ рдЬрд┐рдирдЬрд╛ 2 рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ:
if PY2: iterkeys = lambda d: d.iterkeys() itervalues = lambda d: d.itervalues() iteritems = lambda d: d.iteritems() else: iterkeys = lambda d: iter(d.keys()) itervalues = lambda d: iter(d.values()) iteritems = lambda d: iter(d.items())
рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдЬреИрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ:
if PY2: def implements_dict_iteration(cls): cls.iterkeys = cls.keys cls.itervalues = cls.values cls.iteritems = cls.items cls.keys = lambda x: list(x.iterkeys()) cls.values = lambda x: list(x.itervalues()) cls.items = lambda x: list(x.iteritems()) return cls else: implements_dict_iteration = lambda x: x
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐
keys()
рдкрджреНрдзрддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдорд┐рддреНрд░реЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
@implements_dict_iteration class MyDict(object): ... def keys(self): for key, value in iteritems(self): yield key def values(self): for key, value in iteritems(self): yield value def items(self): ...
рд╕рд╛рдорд╛рдиреНрдп рдЗрдЯрд░реЗрдЯрд░ рдкрд░рд┐рд╡рд░реНрддрди
рдЪреВрдВрдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХрдорд╛рддреНрд░ рдкрд░рд┐рд╡рд░реНрддрди
next()
рд╕реЗ
__next__
рддрдХ рд╕рдВрдХреНрд░рдордг рдерд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣
next(x)
рдкрд░
x.next()
рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЕрдЬрдЧрд░ рдмрд╛рдХреА рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ, рдПрдХ рдХреНрд▓рд╛рд╕ рдбреЗрдХреЛрд░реЗрдЯрд░ рдорджрдж рдХрд░реЗрдЧрд╛:
if PY2: def implements_iterator(cls): cls.next = cls.__next__ del cls.__next__ return cls else: implements_iterator = lambda x: x
рдХрдХреНрд╖рд╛ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрджрдо рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдирд╛рдо
__next__
:
@implements_iterator class UppercasingIterator(object): def __init__(self, iterable): self._iter = iter(iterable) def __iter__(self): return self def __next__(self): return next(self._iter).upper()
рдХреЛрдбреЗрдХреНрд╕ рдмрджрд▓реЗрдВ
рджреВрд╕рд░реЗ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдереАред рдЖрдк рдПрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕рд░рдгреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рдиреЛрдВ рдХреЗ рджреМрд░рд╛рди, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореБрдЦреНрдп рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдереЗред 3.x рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рд╡реЗ рдЕрдзрд┐рдХ рд╕рдЦреНрдд рд╣реЛ рдЧрдП, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ 3.0 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ 3.3 рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╕рд╛рдмрд┐рдд рд╣реБрдЖред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рддреЛ рдХреЛрдбреЗрдХреНрд╕ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдФрд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, 3.3 рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдереЗред рдЙрдирдореЗрдВ рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЗрдХреНрд╕ рдФрд░ рдмреЗрд╕ 64 рдХреЛрдбреЗрдХреНрд╕ред
рдЗрди рдХреЛрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ: рд▓рд╛рдЗрди рдСрдкрд░реЗрд╢рди рдФрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдСрдкрд░реЗрд╢рдиред 2.x рд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛
str.encode()
рдЕрдм
str.encode()
рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдмрджрд▓рддреЗ рдПрдкреАрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП 2.x рдФрд░ 3.x рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
>>> import codecs >>> codecs.encode(b'Hey!', 'base64_codec') 'SGV5IQ==\n'
рдЖрдк рдпрд╣ рднреА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ 3.3 рдореЗрдВ рдХреЛрдбреЗрдХреНрд╕ рдиреЗ рдЙрдкрдирд╛рдо рдЦреЛ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ
'base64'
рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
'base64_codec'
рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЗрди рдХреЛрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
Binacsii рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ
рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд╛
рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ ред
рдЕрдиреНрдп рдиреЛрдЯ
рдРрд╕реЗ рдХрдИ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЬреЛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрддрдиреЗ рджреБрд░реНрд▓рдн рд╣реИрдВ рдХрд┐ рдореИрдВ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдФрд░ рд╕реАрдорд╛ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рддрдХ рд▓рдЧрднрдЧ рдЕрджреГрд╢реНрдп рд╣реИрдВред
- рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдлрд╝рд╛рдЗрд▓ IO рдПрдХреНрд╕реЗрд╕ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдкрд░реЗрд╢рд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдпреВрдирд┐рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред
open()
рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдореЗрдВ рдЦрддрд░рдирд╛рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ SSH рдХреЗ рдКрдкрд░ рдПрдХ рдорд╢реАрди рд╕реЗ en_US
рд▓реЛрдХреЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрди рд╕реЗ рдЬрд╛рддрд╛ de_AT
, рдЕрдЬрдЧрд░ рдХреЛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП ASCII рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рддреАрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЬреЛ 2.x рдореЗрдВ рднреА рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдмрд╕ рдмрд╛рдЗрдирд░реА рдореЛрдб рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдХреЛрдб рдХрд░реЗрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк 2.x рдореЗрдВ codecs.open
рдпрд╛ io.open
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 3.x рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд open
ред - рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ URL рдХреЛ рдпреВрдирд┐рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ 3.x рдореЗрдВ рдХреБрдЫ URL рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдЯреНрд░реЗрд╕рдмреИрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рд░реИрдкрд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдирд╛ рд╣реИ:
if PY2: exec('def reraise(tp, value, tb):\n raise tp, value, tb') else: def reraise(tp, value, tb): raise value.with_traceback(tb)
- рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ рдЬреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрднрд░ рд╣реИ рддреЛ рдкрд┐рдЫрд▓рд╛
exec
рд╣реИрдХ рдЙрдкрдпреЛрдЧреА рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реНрд╡рдпрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдордирдорд╛рдиреЗ рдирд╛рдо рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЛрдИ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ eval
рдФрд░ compile
рдХреЛ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХрд╛рд░реНрдп exec_
рдШреЛрд╖рдгрд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
exec_ = lambda s, *a: eval(compile(s, '<string>', 'exec'), *a)
- рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдЬрдЧрд░ рд╕реА рдПрдкреАрдЖрдИ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реА рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдЖрдк рддреБрд░рдВрдд рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЧреЛрд▓реА рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд▓рд╣рд╛рд▓, рдореБрдЭреЗ рдРрд╕реЗ рдХрд┐рд╕реА рдЙрдкрдХрд░рдг рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдорджрдж рдХрд░ рд╕рдХреЗред рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ cffi рдпрд╛ ctypes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реБрдиреНрди рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рджрд░реНрдж рдХреЛ рд╡рд┐рдирдореНрд░рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдКрдкрд░ рдХреБрдЫ рдмреБрд░рд╛ рдХрд╛рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рд╛рдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рд╕рдордп рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╢рд╛рдВрдд рдЪреАрдЬ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред
рдирд┐рд╖реНрдХрд░реНрд╖
2.x рдФрд░ 3.x рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдХреЛрдб рдЖрдЬ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред , , , API . , , 2.5, 3.0-3.2, .