рдпрд╣ рдореЗрд░реЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо-рдЪреИрдирд▓ @pythonetc рд╕реЗ рдкрд╛рдпрдерди рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдЭрд╛рд╡реЛрдВ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдирдпрд╛ рдЪрдпрди рд╣реИред
Ations
рдкрд┐рдЫрд▓рд╛ рдкреНрд░рдХрд╛рд╢рдирдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ
\
рдкреНрд░рддреАрдХ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рд╣реИред
\t
рдЯреИрдм рдХреИрд░реЗрдХреНрдЯрд░ рд╣реИ,
\r
рдХреИрд░рд┐рдЬ рд░рд┐рдЯрд░реНрди рд╡рдЧреИрд░рд╣ рд╣реИред
рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ-рддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
r'\t'
рд╕рд┐рд░реНрдл рдмреИрдХрд╕реНрд▓реИрд╢ рдФрд░
t
ред
рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
'
рдЕрдВрджрд░
r'...'
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдмрдЪ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
>>> print(r'It\'s insane!') It\'s insane!
рд╕реВрдЪреА рдХреА рд╕рдордЭ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдФрд░
if
рдЦрдВрдб рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
In : [(x, y) for x in range(3) for y in range(3)] Out: [ (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2) ] In : [ (x, y) for x in range(3) for y in range(3) if x != 0 if y != 0 ] Out: [(1, 1), (1, 2), (2, 1), (2, 2)]
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ
for
рдФрд░
if
рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
In : [ (x, y) for x in range(3) for y in range(x + 2) if x != y ] Out: [ (0, 1), (1, 0), (1, 2), (2, 0), (2, 1), (2, 3) ]
рдЖрдк рдорд┐рд╢реНрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
if
рдПрд╕ рдФрд░ рдПрд╕ рдХреЗ
for
рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди:
In : [ (x, y) for x in range(5) if x % 2 for y in range(x + 2) if x != y ] Out: [ (1, 0), (1, 2), (3, 0), (3, 1), (3, 2), (3, 4) ]
sorted
рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ
sorted
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣
key
рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдореВрд▓ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЙрди рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ:
>>> x = [dict(name='Vadim', age=29), dict(name='Alex', age=4)] >>> sorted(x, key=lambda v: v['age']) [{'age': 4, 'name': 'Alex'}, {'age': 29, 'name': 'Vadim'}]
рдХрд╛рд╢, рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд┐ рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЗрд╕
key
рддрд░реНрдХ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗред рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрджрд╛рд╣рд░рдг
heapq
(рдЖрдВрд╢рд┐рдХ рд╕рдорд░реНрдерди) рдФрд░
heapq
(рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ)ред
рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЙрдЪрд┐рдд рдХрдВрдкреНрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ:
>>> class User: ... def __init__(self, name, age): ... self.name = name ... self.age = age ... def __lt__(self, other): ... return self.age < other.age ... >>> x = [User('Vadim', 29), User('Alex', 4)] >>> [x.name for x in sorted(x)] ['Alex', 'Vadim']
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рдРрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдкрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рд╣реИрдВред рдпрд╣ рдердХрд╛рдК рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдк tuples
(a, b)
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ
a
(рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп aka prioirty) рдФрд░
b
рдореВрд▓ рдореВрд▓реНрдп рд╣реИ:
>>> users = [dict(name='Vadim', age=29), dict(name='Alex', age=4)] >>> to_sort = [(u['age'], u) for u in users] >>> [x[1]['name'] for x in sorted(to_sort)] ['Alex', 'Vadim']
рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдЬрдирд░реЗрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ
yield
рдХреАрд╡рд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ:
In : def f(): ...: pass ...: In : def g(): ...: yield ...: In : type(f()) Out: NoneType In : type(g()) Out: generator
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдЦрд╛рд▓реА рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
In : def g(): ...: if False: ...: yield ...: In : list(g()) Out: []
рд╣рд╛рд▓рд╛рдВрдХрд┐,
yield from
рдмрд╛рдж
yield from
рд╕рд░рд▓ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╣рддрд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдпрд╣ рд╣реЛрдЧрд╛:
def g(): yield from []
рдкрд╛рдпрдерди рдореЗрдВ, рдЖрдк рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
>>> 0 < 1 < 2 True >>> 0 < 1 < 0 False
рдРрд╕реА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЛ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдк
>
рдФрд░
<
: рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ
>>> 0 < 1 > 2 False >>> 0 < 1 < 2 > 1 > 0 True
рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░ рдЬреИрд╕реЗ
==
,
is
рдФрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:
>>> [] is not 3 in [1, 2, 3] True
рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд░ рдХреЛ рджреЛ рдирд┐рдХрдЯрддрдо рдСрдкрд░реЗрдВрдб рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
a OP1 b OP2 c
рдХрдбрд╝рд╛рдИ рд╕реЗ
(a OP1 b) AND (b OP2 c)
рдмрд░рд╛рдмрд░ рд╣реИред
c
рдФрд░
c
рдмреАрдЪ рдХреЛрдИ рддреБрд▓рдирд╛ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИ:
class Spy: def __init__(self, x): self.x = x def __eq__(self, other): print(f'{self.x} == {other.x}') return self.x == other.x def __ne__(self, other): print(f'{self.x} != {other.x}') return self.x != other.x def __lt__(self, other): print(f'{self.x} < {other.x}') return self.x < other.x def __le__(self, other): print(f'{self.x} <= {other.x}') return self.x <= other.x def __gt__(self, other): print(f'{self.x} > {other.x}') return self.x > other.x def __ge__(self, other): print(f'{self.x} >= {other.x}') return self.x >= other.x s1 = Spy(1) s2 = Spy(2) s3 = Spy(3) print(s1 is s1 < s2 <= s3 == s3)
рдЖрдЙрдЯрдкреБрдЯ:
1 < 2 2 <= 3 3 == 3 True