рдпрд╣ рдореЗрд░реА
@pythonetc рдлреАрдб рд╕реЗ рдкрд╛рдпрдерди рдЯрд┐рдкреНрд╕ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рддреАрд╕рд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред
рдкрд┐рдЫрд▓реЗ рдЪрдпрди:
рдлреИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐
рдпрджрд┐ рдЖрдк
__init__
рдЕрдВрджрд░ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рдореАрдЪреАрди рд╣реИ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рддрдХрдиреАрдХреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдЧрд╛ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
__init__
host
рдФрд░
port
рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░
host
:
class Query: def __init__(self, host, port): self._connection = Connection(host, port)
рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк:
class Query: def __init__(self, connection): self._connection = connection @classmethod def create(cls, host, port): return cls(Connection(host, port))
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдо рд╕реЗ рдХрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рд╣реИрдВ:
- рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЖрд╕рд╛рди рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЖрдк
Query(FakeConnection())
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдЬрд┐рддрдиреЗ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдк рди рдХреЗрд╡рд▓
host
рдФрд░ port
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрдиреНрдп рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред - рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐
__init__
рд╕рд╛рде рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд╕рдВрднрд╡ рд╣реИред
рд╕реБрдкрд░ рдпрд╛ рдЕрдЧрд▓рд╛
super()
рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
class BaseTestCase(TestCase): def setUp(self): self._db = create_db() class UserTestCase(BaseTestCase): def setUp(self): super().setUp() self._user = create_user()
рд╕реБрдкрд░ рдирд╛рдо рдХрд╛ рдорддрд▓рдм рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ "рд╕реБрдкрд░"ред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЙрдЪреНрдЪ рд╢реНрд░реЗрдгреА рдореЗрдВ" (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж "рдЕрдзреАрдХреНрд╖рдХ")ред рдЙрд╕реА рд╕рдордп,
super()
рд╣рдореЗрд╢рд╛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЪрд╛рдЗрд▓реНрдб рдХреНрд▓рд╛рд╕ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП
next()
рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛
next()
, рдЪреВрдВрдХрд┐ рдЕрдЧрд▓реА рдХрдХреНрд╖рд╛ рдХреЛ рдПрдордЖрд░рдУ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
class Top: def foo(self): return 'top' class Left(Top): def foo(self): return super().foo() class Right(Top): def foo(self): return 'right' class Bottom(Left, Right): pass
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐
super()
рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред
>>> Bottom().foo() 'right' >>> Left().foo() 'top'
рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдирд╛рдо рд╕реНрдерд╛рди
рдПрдХ рдХреНрд▓рд╛рд╕ рджреЛ рдмрдбрд╝реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд░реНрдЧ рдХреЗ рд╢рд░реАрд░ рдХреЛ рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд╢рд░реАрд░ рдХреА рддрд░рд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореА рдирд╛рдо рд╕реНрдерд╛рди (рдЬрд┐рд╕реЗ
locals()
рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
locals()
) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛рдХреНрд▓рд╕ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ
type
) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
class Meta(type): def __new__(meta, name, bases, ns): print(ns) return super().__new__( meta, name, bases, ns ) class Foo(metaclass=Meta): B = 2
рдпрд╣ рдХреЛрдб
{'__module__': '__main__', '__qualname__':'Foo', 'B': 3}
ред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд░ рдЖрдк
B = 2; B = 3
рдЬреИрд╕рд╛ рдХреБрдЫ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ
B = 2; B = 3
B = 2; B = 3
, рдлрд┐рд░ рдореЗрдЯрд╛рдХреНрд▓реЗрдЬрд╝ рдХреЗрд╡рд▓
B = 3
рдХреЛ рджреЗрдЦреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдпрд╣ рдорд╛рди
ns
ред рдпрд╣ рд╕реАрдорд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдкрдЬреА рд╣реИ рдХрд┐ рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рд╢рд░реАрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдЦрд┐рд╕рдХрд╛рдХрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рдорд╛рди, рдпрджрд┐ рдЖрдк
__prepare__
рд╕реЗ
__prepare__
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
class CustomNamespace(dict): def __setitem__(self, key, value): print(f'{key} -> {value}') return super().__setitem__(key, value) class Meta(type): def __new__(meta, name, bases, ns): return super().__new__( meta, name, bases, ns ) @classmethod def __prepare__(metacls, cls, bases): return CustomNamespace() class Foo(metaclass=Meta): B = 2 B = 3
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо:
__module__ -> __main__ __qualname__ -> Foo B -> 2 B -> 3
рдЗрд╕ рдкреНрд░рдХрд╛рд░
enum.Enum
рдирдХрд▓ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
matplotlib
matplotlib
рдЪрд╛рд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рд▓рдЪреАрд▓рд╛ рдкрд╛рдЗрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдХрдИ рдЙрддреНрдкрд╛рдж рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЬреБрдкрд┐рдЯрд░ рдФрд░ рдкреАрдЪрд╛рд░реНрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣рд╛рдБ
matplotlib
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рднрдЧреНрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://repl.it/@VadimPushtaev/myplotlib (рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХреА рд╢реАрд░реНрд╖рдХ рдЫрд╡рд┐ рджреЗрдЦреЗрдВ)ред
рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди
рдЕрдЬрдЧрд░ рддрд╛рд░реАрдЦреЛрдВ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА
datetime
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрддреНрд╕реБрдХ рд╣реИ рдХрд┐
datetime
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕рдордп рдХреНрд╖реЗрддреНрд░ (рдЕрд░реНрдерд╛рдд,
tzinfo
рд╡рд┐рд╢реЗрд╖рддрд╛) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд╕рдорд░реНрдерди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп
pytz
ред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
pytz
рдкреВрд░реА рддрд░рд╣ рд╕реЗ
tzinfo
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣
pytz
рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: "рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп tzinfo рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрд┐рдд рдЕрдЬрдЧрд░ рдПрдкреАрдЖрдИ рд╕реЗ рдЕрд▓рдЧ рд╣реИред"
рдЖрдк
tzinfo
рд░реВрдк рдореЗрдВ
tzinfo
pytz
рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдЧрд▓ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЦрддрд░рд╛ рд╣реИ:
In : paris = pytz.timezone('Europe/Paris') In : str(datetime(2017, 1, 1, tzinfo=paris)) Out: '2017-01-01 00:00:00+00:09'
рдСрдлрд╕реЗрдЯ +00: 09 рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред Pytz рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
In : str(paris.localize(datetime(2017, 1, 1))) Out: '2017-01-01 00:00:00+01:00'
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдмрджрд▓рддреЗ рдбреЗрдЯреНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдПрд╕рдЯреА рдЕрд╡рдзрд┐ рдХреА рд╕реАрдорд╛ рдкрд░) рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ
datetime
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП
normalize
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
In : new_time = time + timedelta(days=2) In : str(new_time) Out: '2018-03-27 00:00:00+01:00' In : str(paris.normalize(new_time)) Out: '2018-03-27 01:00:00+02:00'
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╛рдпрдерди 3.6 рд╣реИ, рддреЛ рдкреНрд░рд▓реЗрдЦрди
dateutil.tz
рдмрдЬрд╛рдп
dateutil.tz
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА
pytz
ред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ
tzinfo
рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ
normalize
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдЪ рд╣реИ, рдпрд╣ рдЕрдзрд┐рдХ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐
pytz
API рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗрдВред
рдЬрд╛рджреВ рдХреА рд░реЛрдХ
next(x)
рдмрд╛рд░
next(x)
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рд╡рд╣ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐
x
рд╕реЗ рдПрдХ рдирдпрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣
StopIteration
, рддреЛ
StopIteration
рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдЕрдм рдорд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд░реАрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ
StopIteration
рдлреЗрдВрдХ рджреЗрдЧрд╛:
>>> def one_two(): ... yield 1 ... yield 2 ... >>> i = one_two() >>> next(i) 1 >>> next(i) 2 >>> next(i) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
StopIteration
рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ
next
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:
>>> list(one_two()) [1, 2]
рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдЯреЙрдкрдЗрдВрдЯрд░реЗрд╢рди рдЬреЛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдЖ, рдЪреБрдкрдЪрд╛рдк рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЕрдВрдд рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдкрд╡рд╛рдж рдХреА рддрд░рд╣ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ:
def one_two(): yield 1 yield 2 def one_two_repeat(n): for _ in range(n): i = one_two() yield next(i) yield next(i) yield next(i) print(list(one_two_repeat(3)))
рдпрд╣рд╛рдВ, рдЕрдВрддрд┐рдо
yield
рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ: рдПрдХ рдлреЗрдВрдХ
StopIteration
рдЕрдкрд╡рд╛рдж
list(...)
рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо
[1, 2]
ред рд╣рд╛рд▓рд╛рдБрдХрд┐, Python 3.7 рдореЗрдВ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд╡рд┐рджреЗрд╢реА
StopIteration
рдЬрдЧрд╣
RuntimeError
:
Traceback (most recent call last): File "test.py", line 10, in one_two_repeat yield next(i) StopIteration The above exception was the direct cause of the following exception: Traceback (most recent call last): File "test.py", line 12, in <module> print(list(one_two_repeat(3))) RuntimeError: generator raised StopIteration
рдкрд╛рдпрдерди 3.5 рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк
__future__ import generator_stop
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред