рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдЬрдЧрд░ рд╕реЗ pyobject.ru рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдпрд╣ рднреА рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ред рдкреНрд░рд╢реНрди рд╕реНрд╡рдпрдВ
рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз
рд╣реИрдВ ред
рдЕрд╕реНрд╡реАрдХрд░рдг :
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ: рдкреЛрд╕реНрдЯ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдиреЙрдм рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ (рдФрд░ рд╡реЗ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рд╣реЛрдЧрд╛), рдХреГрдкрдпрд╛ рд▓рд┐рдЦреЗрдВред
рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдмреЛрдВ рдХреЛ рдЙрд╕реА рд╢реНрд░реЗрдгреА рдореЗрдВ рдмрд╛рдВрдЯрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреАрдПрд╕ рдкрд╛рдпрдерди I рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 2.6.6 рд╣реИ
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рдг
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ:
class Foo(object): """docstring for Foo""" arg1 = None _arg2 = None __arg3 = None def __init__(self): super(Foo, self).__init__() def bar(self): pass
1. рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
print dir(Foo)
2. рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдкрд╛рдпрдерди рдореЗрдВ, "_" рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рдЬреА рдХреЗ рд▓рд┐рдП, рдЪрд░ рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗ "__"ред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ (рд╕реВрдЪреА рдХреА рд╕рдордЭ) рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
print [arg for arg in dir(Foo) if not arg.startswith('_')]
рдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
print filter(lambda x: not x.startswith('_'), dir(Foo))
рдореЗрд░реЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмреЗрд╣рддрд░ рд╣реИред
3. рд╡рд╕реНрддреБ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЪреВрдВрдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рддрд░реАрдХреЗ рдкрд╣рд▓реА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ?), рдлрд┐рд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╣рдо рдЧреЗрдЯрдЕрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдХрд░рддрд╛ рд╣реИред
print [arg for arg in dir(Foo) if callable(getattr(Foo, arg))]
4. рдХрд┐рд╕ "рдореИрдЬрд┐рдХ" рдЪрд░ рдореЗрдВ рдорджрдж рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ?
__Doc__ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВред рдЗрд╕ рдЪрд░ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдЯрд┐рдкреНрдкрдгреА рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИ
рдХреНрд▓рд╛рд╕ / рдореЗрдердб / рдлрдВрдХреНрд╢рди рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди (рджреЗрдЦреЗрдВ рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕)ред
print Foo.__doc__
рдЖрдк рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
>>> help(int)
5. рджреЛ рдЯреНрдпреВрдкрд▓ рд╣реИрдВ, рдкрд╣рд▓реЗ рджреЛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рддреАрд╕рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
print (2, 5) + (4, 6)
6. рджреЛ рдЯреБрдкрд▓реНрд╕ рд╣реИрдВ, рдкрд╣рд▓реЗ рджреЛ рдЯреБрдкрд▓реНрд╕ рдХреЗ рдЕрдиреВрдареЗ рддрддреНрд╡реЛрдВ рдХреЗ рдорд┐рд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рддреАрд╕рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рдореИрдВрдиреЗ 2 рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦреЗ:
1. рдЯреНрдпреВрдкрд▓реНрд╕ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд▓реВрдк рд▓рд┐рдЦреЗрдВ
2. рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реЗрдЯ рдкреНрд░рдХрд╛рд░ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реИрд╢) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рд╕ рдкрд░ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдорд╛рдзрд╛рди (XOR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):
print tuple(set((2, 3, 4)) ^ set((4, 5)))
7. рдХреНрдпреЛрдВ, рдпрджрд┐ рд╕реВрдЪреА рд▓реВрдк рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рддреЛ x рдХреЗ рд▓рд┐рдП lst [:] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ: [:]?
[:] - рдПрдХ рдЕрдЬрдЧрд░ рдореЗрдВ рдХрдЯреМрддреА рдХрд╛ рдкрджрдирд╛рдоред рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: [:] lst рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореВрд▓ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдЪрд▓рдирд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
8. рдПрдХ рд╣реА рд▓рдВрдмрд╛рдИ рдХреА рджреЛ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВ, рдПрдХ рдХреБрдВрдЬреА рдореЗрдВ, рджреВрд╕рд░реА рдорд╛рди рдореЗрдВред рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдУред
рд╣рдо рдЬрд┐рдк рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдЯреНрдпреВрдкрд▓реНрд╕ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рддрд╛рдирд╛рд╢рд╛рд╣реА, рдЬреЛ рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рддрд╛ рд╣реИред
a = ('John', 'Peter') b = (1, 2) print dict(zip(a, b))
9. рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рдХреА рджреЛ рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВ, рдПрдХ рдХреБрдВрдЬреА рдореЗрдВ, рджреВрд╕рд░реА рдорд╛рдиреЛрдВ рдореЗрдВред рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдУред рдЙрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдорд╛рди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдирджреЗрдЦреА рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реИред
a = ('John', 'Peter', 'Daniel') b = (1, 2) print dict((len(a) > len(b)) and map(None, a, b) or zip(a, b))
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬрд╝рд┐рдк, рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЬрд╝рд┐рдк рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдмрд╕реЗ рдХрдо рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рддрдХ рд╕реАрдорд┐рдд рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ рдЬрдм рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕реЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рд╣реИрдВред рджреВрд╕рд░реА рдЕрдЬрдЧрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ, рдирдХреНрд╢реЗ рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рдХреЛрдИ рднреА рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдорд╛рди рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рдХреЛ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдШ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рд╕рдорд╛рди рдЯреНрдпреВрдкрд▓реНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, itertools.izip_longest рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ 2.6 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
10. рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИред рдЗрд╕реЗ рдЙрд▓реНрдЯрд╛ рдХрд░ рджреЛред рдпрд╛рдиреА рдЬреЛрдбрд╝реЗ рдХреБрдВрдЬреА: рдореВрд▓реНрдп рд╕реНрд╡реИрдк - рдореВрд▓реНрдп: рдХреБрдВрдЬреАред
a = {'John': 1, 'Peter': 2} print dict((val, key) for (key, val) in a.iteritems())
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЬрд╝рд┐рдк рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
a = {'John': 1, 'Peter': 2} print dict(zip(a.itervalues(), a.iterkeys()))
рдкреАрдПрд╕ рдореИрдВ рдЧреБрд░реБ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ - рдЬрд╝рд┐рдк рдпрд╛ рдЗрдЯрд░реНрдЯреЛрд▓реЗрд╕рд┐рд╕рд┐рдкред рдпрд╣реА рдорд╛рди рдореВрд▓реНрдпреЛрдВ / рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред
11. рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, utf-8 рдФрд░ cp1251 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб 8-рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдореИрдВрдиреЗ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рд╕рд╣реА рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛, рддреЛ:
greeting = u'' print greeting.encode('utf-8') print greeting.encode('cp1251')
12. рдПрдХ cp1251 рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдПрдХ рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдЗрд╕реА рддрд░рд╣:
greeting = '' print greeting.decode('cp1251')
рдХрд╛рд░реНрдпреЛрдВ
1. рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд▓рд┐рдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдпрд╛ рдПрдХ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд╕рднреА рддрд░реНрдХ рджрд┐рдП рдЧрдП рд╣реИрдВред
рдореИрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдорд╛рдзрд╛рди рджреЗрдЦрддрд╛ рд╣реВрдВ: рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред рдпрджрд┐ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдореЗрдВ __len__ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред
def sum(*args): """ Returns sum of the args. >>> sum(1) 1 >>> sum(2, 2) 4 >>> sum(1, 2, (3, 4)) 10 >>> sum(1, ()) 1 >>> sum(-1, 1.0) 0.0 """ result = 0 for arg in args: if hasattr(arg, '__len__'): result += sum(*arg) else: result += arg return result
2. рдПрдХ рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рдПрдЧрд╛ред
рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдЧрдбрд╝рдмрдбрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ), рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рдВрдХреНрд╢рди, рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЬреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╕реЗрдЯ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдПрдХ рдХреНрд▓реЛрдЬрд░ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪред
def addition_inner(val): """ >>> add5 = addition_inner(5) >>> add5(3) 8 >>> add1 = addition_inner(-1) >>> add1(3) 2 >>> add_str = addition_inner('s') >>> add_str(3) Traceback (most recent call last): ... TypeError: unsupported operand type(s) for +: 'int' and 'str' """ def func(arg): return arg + val return func def addition_lambda(val): """ >>> add5 = addition_lambda(5) >>> add5(3) 8 >>> add1 = addition_lambda(-1) >>> add1(3) 2 >>> add_str = addition_lambda('s') >>> add_str(3) Traceback (most recent call last): ... TypeError: unsupported operand type(s) for +: 'int' and 'str' """ return lambda x: x + val
3. рдЖрдЗрдЯрдо 2 рдХреЗ рд╕рдорд╛рди рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рд▓рд┐рдЦреЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдВ
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рд▓рд┐рдЦреЗ рдереЗред
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
def additions(start, end): """ Returns list of addition functions >>> for addition in additions(0, 5): ... print addition(1) 1 2 3 4 5 >>> print additions(5, 0) [] >>> print additions(0, 2) # doctest: +ELLIPSIS [<function func at 0x...>, <function func at 0x...>] """ return [addition_inner(val) for val in range(start, end)]
4. рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдирдХреНрд╢рд╛ рд▓рд┐рдЦреЗрдВ:
- рдкрд╣рд▓рд╛ рддрд░реНрдХ рдпрд╛ рддреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реВрдЪреА рд╣реИ
- рджреВрд╕рд░рд╛ рддрд░реНрдХ - рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА
- рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдХрд╛рд░реНрдп рдПрдХ рд╣реА рддрд░реНрдХ рдХреЗ рдХрд╛рд░реНрдп рд╣реИрдВ
рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ (рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ - рдПрдХ рд▓реВрдк рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдкрд╛рд╕-рдкрд╛рд╕ рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╕рдЯреНрд░реИрдЯ рдФрд░ __len__ рдореИрдЬрд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЗрдВрд╕реНрдЯреАрди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
def mymap(func, args): """ Applies list of functions for args. >>> add0 = addition_inner(0) >>> add1 = addition_inner(1) >>> add2 = addition_inner(2) >>> add5 = addition_inner(5) >>> print mymap(add5, [1, 2, 3]) [6, 7, 8] >>> print mymap([add0, add1, add2], [1, 2, 3]) [(1, 2, 3), (2, 3, 4), (3, 4, 5)] >>> print mymap([], []) [] >>> print mymap(sum, [(3, 4, 5, 6, (7,))]) [25] """ if isinstance(func, collections.Iterable): return [tuple(map(f, args)) for f in func]
iterators
рдереЛрдбрд╝рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдореБрдЭреЗ рдЗрдЯреНрд░реЗрдЯрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдмрд╛рдд рдирд╣реАрдВ рджрд┐рдЦреА, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдирдХреЗ рдХреЛрдб рдХреЛ itertools рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдмреЗрд╣рддрд░ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
Iterators рдЬрдирд░реЗрдЯрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ
рд▓реЗрдЦ рд╣реИ ред
рдореЙрдбреНрдпреВрд▓
1. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрдпрд╛рддрд┐рдд рдореЙрдбреНрдпреВрд▓ рдлреВ рд╣реИ, рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреМрддрд┐рдХ рдкрде рдХрд╛ рдкрддрд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИ?
рдкрде __file__ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
2. рдлреВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ, рдЖрдк рдлреАрдбрдкрд╕рд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдлреАрдбрдкрд░рд╕рд░ рдХрд╛ рдПрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рдЗрдЯ-рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реИ, рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рдИ рдлреВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИред рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ PYTHONPATH рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдлреАрдбрд░рд╕рд░ рднреА рд╣реИ, рд╕рдВрд╕реНрдХрд░рдг Z. рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?
рд╡рд░реНрдЬрди Y рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд░рд▓реЗрдЦрди (рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдиреБрднрд╛рдЧ 6) рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдпрд╛рдд рдЖрджреЗрд╢ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
1. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕рдХреЗ рдЖрдЧреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
2. PYTHONPATH
3. рд╕рд┐рд╕реНрдЯрдо рдХреИрдЯрд▓реЙрдЧ
3. рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕реВрдЪреА рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ?
>>> import sys >>> sys.path
4. рдЖрдкрдХреЗ рдкрд╛рд╕ рдлреВ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдмрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Foo рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдмрд╛рд░рдХреЛрдб рдФрд░ рдмрд╛рд░ / __ init__.py рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдХрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рддреН рдкреИрдХреЗрдЬред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдкреБрди: рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреИрдХреЗрдЬ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
5. __name__ == '__main__' рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ рдФрд░ рдХреНрдпреЛрдВ
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдпрд╛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рди __main__ рд╣реЛрдЧрд╛, рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдоред
рдЖрдЬ рд╕рдм рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред
рдкреАрдПрд╕ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА - рдореИрдВ рдЖрдЦрд┐рд░реА 2 рдЦрдВрдбреЛрдВ рдХреЗ рдЙрддреНрддрд░ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦреВрдВрдЧрд╛ред