рд╣рдо рдмреБрд░реНрдХрд╛ рдореЗрдВ рди рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдФрд░ рдирдВрдмрд░реЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдореВрд▓ рдЙрдкрдХрд░рдг, рдкрд╛рдпрдерди рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдирдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ ред рдЗрд╕ рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦ рдореЗрдВ, рд▓реЗрдЦрдХ рдиреЗ namedtuple
рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдФрд░ рднрд╛рд╖рд╛ рдХреА рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИредрдХреБрдЫ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ рдореИрдВ рд╕реИрди рдлреНрд░рд╛рдВрд╕рд┐рд╕реНрдХреЛ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╡рд┐рдорд╛рди рдореЗрдВ рдХреЛрдИ рдЗрдВрдЯрд░рдиреЗрдЯ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╛рдпрдерди 2.7 рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рд╛ред
namedtuple
рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред
рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИрдВред рдпрджрд┐ рдЖрдк
namedtuple
рдХрднреА рднреА
namedtuple
рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛
рд╕реЗ рдЦреБрдж рдХреЛ
рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ ред
рдХреЛрдб
рд╡рд╛рд╣! рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╢реАрд░реНрд╖рдХ, рд╕рд╣реА?
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛, рдФрд░ рдПрдХ рдЕрдЪреНрдЫреЗ
рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
def namedtuple(typename, field_names, verbose=False, rename=False): """ . >>> Point = namedtuple('Point', 'x y') >>> Point.__doc__ # 'Point(x, y)' >>> p = Point(11, y=22) # >>> p[0] + p[1] # 33 >>> x, y = p # >>> x, y (11, 22) >>> px + py # 33 >>> d = p._asdict() # >>> d['x'] 11 >>> Point(**d) # Point(x=11, y=22) >>> p._replace(x=100) # Point(x=100, y=22) """
рдлрд┐рд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
basestring
рдХреЙрд▓ рдореЗрдВ
basestring
рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди
basestring
- рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░
unicode
рдпрд╛
str
(рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди <3.0 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
рдпрджрд┐
rename
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рд╣реИ, рддреЛ рд╕рднреА рдЕрдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЛ рдЙрдирдХреЗ рдкрджреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
field_names = tuple(map(str, field_names)) if rename: names = list(field_names) seen = set() for i, name in enumerate(names): if (not all(c.isalnum() or c=='_' for c in name) or _iskeyword(name) or not name or name[0].isdigit() or name.startswith('_') or name in seen): names[i] = '_%d' % i seen.add(name) field_names = tuple(names)
all()
рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВ
all()
ред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐,
all(bool_expr(x) for x in things)
, рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреНрдпрдВрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред
for name in (typename,) + field_names: if not all(c.isalnum() or c=='_' for c in name): raise ValueError( 'Type names and field names can only contain alphanumeric characters and underscores: %r' % name ) if _iskeyword(name): raise ValueError('Type names and field names cannot be a keyword: %r' % name) if name[0].isdigit(): raise ValueError('Type names and field names cannot start with a number: %r' % name)
рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╛рдореЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
seen_names = set() for name in field_names: if name.startswith('_') and not rename: raise ValueError('Field names cannot start with an underscore: %r' % name) if name in seen_names: raise ValueError('Encountered duplicate field name: %r' % name) seen_names.add(name)
рдФрд░ рдЕрдм рдЕрд╕рд▓реА рдордЬрд╝рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред (рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк рдмрдирд╛рдирд╛ рдордЬрд╝реЗрджрд╛рд░ рд╣реИ)ред рд╣рдо рдХреЛрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдлрд╝реАрд▓реНрдб рдирд╛рдо рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдПрдХ tuple рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рд╕рдВрдХреЗрддрди рдХреЗ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ
argtxt
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛
argtxt
ред
рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
namedtuple
рд╣реВрдб рдХреЗ рддрд╣рдд рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд░реЗрдЦрд╛ рдмрд╛рдж рдореЗрдВ рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧреАред
template = '''class %(typename)s(tuple): '%(typename)s(%(argtxt)s)' \n __slots__ = () \n _fields = %(field_names)r \n def __new__(_cls, %(argtxt)s): 'Create new instance of %(typename)s(%(argtxt)s)' return _tuple.__new__(_cls, (%(argtxt)s)) \n @classmethod def _make(cls, iterable, new=tuple.__new__, len=len): 'Make a new %(typename)s object from a sequence or iterable' result = new(cls, iterable) if len(result) != %(numfields)d: raise TypeError('Expected %(numfields)d arguments, got %%d' %% len(result)) return result \n def __repr__(self): 'Return a nicely formatted representation string' return '%(typename)s(%(reprtxt)s)' %% self \n def _asdict(self): 'Return a new OrderedDict which maps field names to their values' return OrderedDict(zip(self._fields, self)) \n __dict__ = property(_asdict) \n def _replace(_self, **kwds): 'Return a new %(typename)s object replacing specified fields with new values' result = _self._make(map(kwds.pop, %(field_names)r, _self)) if kwds: raise ValueError('Got unexpected field names: %%r' %% kwds.keys()) return result \n def __getnewargs__(self): 'Return self as a plain tuple. Used by copy and pickle.' return tuple(self) \n\n ''' % locals()
рджрд░рдЕрд╕рд▓, рдпрд╣ рд╣рдорд╛рд░реЗ рдирдП рд╡рд░реНрдЧ рдХрд╛ рдЦрд╛рдХрд╛ рд╣реИред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рд▓рд┐рдП
locals()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рд╕рд░рд▓ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░реВрд╡реА рдФрд░ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ,
рдЖрдк "{name} is {some_value}"
рдЬреИрд╕реЗ рдХреБрдЫ рд▓рд┐рдЦ
рд╕рдХрддреЗ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
"{name} is {some_value}".format(**locals())
ред
рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐
__slots__
рдХреЛ рдПрдХ рдЦрд╛рд▓реА рдЯрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╛рдпрдерди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдмрдЪрд╛рддрд╛ рд╣реИред рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ (
tuple
), рдФрд░ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдХреНрд╖рдорддрд╛ (рдХреНрдпреЛрдВрдХрд┐
__slots__ = ()
) рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг,
__slots__ = ()
рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдореВрд▓реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ ред
рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд░реАрдб-рдУрдирд▓реА рдкреНрд░реЙрдкрд░реНрдЯреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред
_itemgetter
operator
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ
itemgetter
рд╣реИ рдЬреЛ рдПрдХрд▓ рддрд░реНрдХ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред
for i, name in enumerate(field_names): template += " %s = _property(_itemgetter(%d), doc='Alias for field number %d')\n" % (name, i, i) if verbose: print template
рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд╛рд▓рддреВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рднрд╡реНрдп рд░реЗрдЦрд╛ рд╣реИред рдЙрд╕рдХрд╛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рдПрдХ рд╕реАрдорд┐рдд рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдЪрд▓рдирд╛ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ
exec ... in
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
exec ... in
рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ! рдПрдХ рдкреГрдердХ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИред
exec
рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП
exec
рдЖрд░реНрдорд┐рди рд░реМрдирд╛рдХрд░ рдХреЗ
рдкрдж рдкрд░ рдЬрд╛рдПрдВ ред
рдиреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ
__module__
рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдЬрд╛рджреВ рд╣реИ, рдЬрд┐рд╕реЗ
namedtuple
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
try: result.__module__ = _sys._getframe(1).f_globals.get('__name__', '__main__') except (AttributeError, ValueError): pass
рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИ!
return result
рд╕рд░рд▓, рд╕рд╣реА?
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╡рд░рдг рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдерд╛, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХрджрдо рдкрд╛рдпрдерди рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреА рд╕рд╛рджрдЧреА рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ: рдореЙрдбреНрдпреВрд▓ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рд╕рд╣рд┐рдд рд╕рднреА рдирд╛рдорд╕реНрдерд╛рди, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╢рдмреНрджрдХреЛрд╖ рд╣реИрдВред
namedtuple
рдХреЗ
namedtuple
рдХрд╛ рдЕрдзреНрдпрдпрди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд░рд▓рддрд╛ рдХреА рд╢рдХреНрддрд┐ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
for name in (typename,) + field_names: if not all(c.isalnum() or c=='_' for c in name): raise ValueError('Type names and field names can only contain alphanumeric characters and underscores: %r' % name) if _iskeyword(name): raise ValueError('Type names and field names cannot be a keyword: %r' % name) if name[0].isdigit(): raise ValueError('Type names and field names cannot start with a number: %r' % name)
рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛
for name in (typename,) + field_names: try: exec ("%s = True" % name) in {} except (SyntaxError, NameError): raise ValueError('Invalid field name: %r' % name)
рд╕реАрдзреЗ рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреА рд╡реИрдзрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд░реНрдгрди рдореЗрдВ рд╕рдЯреАрдХрддрд╛ рдЦреЛ рджреЗрдВрдЧреЗред рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдмреАрдЪ рд╣реА find
рд╣рдо рдмрд╣реБрдд рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдкрдврд╝рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓реЛ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝реЗрдВ рдЬреЛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рд╕рд░рд▓ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ!
рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ, рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рди рд╣реЛрдВ!