ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° | ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΠΈΡΠΎΠ½Ρ
ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² CPython ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (GIL, Memory), Best Practices (SOLID, DDD) ΠΈ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ Django/FastAPI. Π Π΅ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΠΈ Ρ ΠΏΠΎΠ΄Π²ΠΎΡ ΠΎΠΌ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. π ΠΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ @evgenycarter Π ΠΠ clck.ru/3Ko7Hq
Show moreπ Analytical overview of Telegram channel ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° | ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΠΈΡΠΎΠ½Ρ
Channel ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° | ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΠΈΡΠΎΠ½Ρ (@bookpython) in the Russian language segment is an active participant. Currently, the community unites 17 977 subscribers, ranking 7 272 in the Technologies & Applications category and 36 658 in the Russia region.
π Audience metrics and dynamics
Since its creation on Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 17 977 subscribers.
According to the latest data from 27 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -96 over the last 30 days and by -2 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 5.41%. Within the first 24 hours after publication, content typically collects 2.62% reactions from the total number of subscribers.
- Post reach: On average, each post receives 972 views. Within the first day, a publication typically gains 471 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
- Thematic interests: Content is focused on key topics such as numbers, yield, ΠΌΠΎΠ΄ΡΠ»Ρ, none, Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ.
π Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
βΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² CPython ΠΈ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ. Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (GIL, Memory), Best Practices (SOLID, DDD) ΠΈ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ Django/FastAPI. Π Π΅ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΠΈ Ρ ΠΏΠΎΠ΄Π²ΠΎΡ
ΠΎΠΌ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. π
ΠΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ @evgenycarter
Π ΠΠ clck.ru/3Ko7Hqβ
Thanks to the high frequency of updates (latest data received on 28 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Loading data
| Date | Subscriber Growth | Mentions | Channels | |
| 27 October | 0 | |||
| 26 October | 0 | |||
| 25 October | 0 | |||
| 24 October | 0 | |||
| 23 October | 0 | |||
| 22 October | +1 | |||
| 21 October | 0 | |||
| 20 October | 0 | |||
| 19 October | +1 | |||
| 18 October | 0 | |||
| 17 October | 0 | |||
| 16 October | +3 | |||
| 15 October | +1 | |||
| 14 October | +1 | |||
| 13 October | +1 | |||
| 12 October | +2 | |||
| 11 October | +1 | |||
| 10 October | +1 | |||
| 09 October | +1 | |||
| 08 October | +1 | |||
| 07 October | +1 | |||
| 06 October | 0 | |||
| 05 October | 0 | |||
| 04 October | 0 | |||
| 03 October | 0 | |||
| 02 October | +1 | |||
| 01 October | +1 |
contextlib.redirect_stdout, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ stdout Π² Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ io.StringIO ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
from contextlib import redirect_stdout
from io import StringIO
s = StringIO()
with redirect_stdout(s):
print(42)
print(s.getvalue())
Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ contextlib.redirect_stderr Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° sys.stderr.
π² ΠΡ Π² MAX
π@BookPython| 2 | ΠΠ½ΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½ΡΠΆΠ½Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ β ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΡΠ΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ. Π Python Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ list:
In : lst = [1, 2, 3]
In : lst.pop()
Out: 3
In : lst
Out: [1, 2]
In : lst[:0] = [4] # push
In : lst
Out: [4, 1, 2]
ΠΠ΄Π½Π°ΠΊΠΎ list Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ (Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΡΠΎΡ "push") ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
In : lst = [0] * 10_000_000
In : %timeit lst[:0] = [1]
9.5 ms Β± 111 Β΅s per loop (mean Β± std. dev. of 7 runs, 100 loops each)
In : %timeit lst.pop()
84.3 ns Β± 4.01 ns per loop (mean Β± std. dev. of 7 runs, 10000000 loops each)
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ pop() Π² 100 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π²ΡΡΠ°Π²ΠΊΠ° Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ list Π² Python: Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΊΠΎΠ½ΡΠ°, Π½ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅/Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°.
ΠΠ»Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ collections.deque. ΠΠ½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½:
In : from collections import deque
In : d = deque([1] * 100_000_000)
In : %timeit d.popleft()
65 ns Β± 0.436 ns per loop (mean Β± std. dev. of 7 runs, 10000000 loops each)
π² ΠΡ Π² MAX
π@BookPython | 523 |
| 3 | Π‘ΠΊΡΡΡΡΠ΅ ΡΠΈΡΠΈ Enum: ΠΊΠ°ΠΊ Π²ΡΠΆΠ°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Enum ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΠΎ Ρ enum.Enum Π² Python Π΅ΡΡΡ ΠΊΡΠ΄Π° Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ β ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ ΡΠΈΡΠ΅ ΠΈ ΠΌΠΎΡΠ½Π΅Π΅.
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ°Π»ΠΎ ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ β Π½ΠΎ Π·ΡΡ.
1. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² Enum
from enum import Enum
class Status(Enum):
DRAFT = 'draft'
PUBLISHED = 'published'
ARCHIVED = 'archived'
def is_visible(self):
return self in {Status.DRAFT, Status.PUBLISHED}
Π’Π΅ΠΏΠ΅ΡΡ Status.DRAFT.is_visible() β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ.
2. Enum Ρ ΠΏΠΎΠ»ΡΠΌΠΈ
from enum import Enum
class Color(Enum):
RED = ('#FF0000', 'danger')
GREEN = ('#00FF00', 'safe')
def __init__(self, hex_code, label):
self.hex_code = hex_code
self.label = label
Color.RED.hex_code # '#FF0000'
Color.RED.label # 'danger'
3. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ auto()
from enum import Enum, auto
class Role(Enum):
ADMIN = auto()
USER = auto()
GUEST = auto()
Π£Π΄ΠΎΠ±Π½ΠΎ, Π΅ΡΠ»ΠΈ Π½Π΅ Π²Π°ΠΆΠ½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½ΡΠΆΠ½Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅.
4. Π‘ΡΡΠΎΠ³Π°Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
Π ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
(API, Π±Π°Π·Ρ) Π»ΡΡΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ enum'ΠΎΠ²:
import json
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Enum):
return obj.value
return super().default(obj)
json.dumps(Status.PUBLISHED, cls=CustomEncoder) # "published"
5. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Status('draft') == Status.DRAFT # True
Status('draft') is Status.DRAFT # True (enum Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ singleton)
ΠΡΠΎΠ³ΠΎ: Enum β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ. ΠΡΠΎ Π»ΡΠ³ΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π°Π½Π½ΡΠ΅, ΡΠ»ΡΡΡΠΈΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ ΡΡΡΠΎΠΉΡΠΈΠ²Π΅Π΅ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ.
π² ΠΡ Π² MAX
π@BookPython | 545 |
| 4 | default_factory Π² dataclass: ΠΌΠΎΡΠ½Π΅Π΅, ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ dataclass ΠΊΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°Π΄Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ. ΠΠΎ ΡΠ΅Π΄ΠΊΠΎ ΠΊΡΠΎ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΈΠ»Ρ default_factory. Π Π·ΡΡ β ΠΎΠ½ ΡΠΏΠ°ΡΠ°Π΅Ρ ΠΎΡ Π±Π°Π³ΠΎΠ² ΠΈ Π΄Π°ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ.
ΠΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»Ρ Π² dataclass, Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΠ½ΡΡΡΡΡ ΠΊ default=. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ»ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ) β Π²Π°Ρ ΠΏΠΎΠ΄ΠΆΠΈΠ΄Π°Π΅Ρ Π»ΠΎΠ²ΡΡΠΊΠ°.
from dataclasses import dataclass, field
@dataclass
class User:
name: str
tags: list[str] = [] # β οΈ ΠΎΠΏΠ°ΡΠ½ΠΎ!
ΠΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ User Π±ΡΠ΄ΡΡ Π΄Π΅Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ. Π’ΠΎ Π΅ΡΡΡ:
a = User("Alice")
b = User("Bob")
a.tags.append("admin")
print(b.tags) # ['admin'] π±
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ default_factory:
@dataclass
class User:
name: str
tags: list[str] = field(default_factory=list)
Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ User Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ:
a = User("Alice")
b = User("Bob")
a.tags.append("admin")
print(b.tags) # []
ΠΠΎ default_factory Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ ΡΠΏΠΈΡΠΊΠΈ. ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°Π΄Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ", Π²ΠΊΠ»ΡΡΠ°Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ:
import uuid
@dataclass
class Session:
id: str = field(default_factory=lambda: str(uuid.uuid4()))
ΠΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:
import os
@dataclass
class Config:
debug: bool = field(default_factory=lambda: os.getenv("DEBUG") == "1")
ΠΡΡΠ°ΡΠΈ, ΡΡΠΎ Π΅ΡΡ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ DI:
@dataclass
class Service:
client: "Client" = field(default_factory=create_default_client)
default_factory β ΡΡΠΎ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ Ρ
Π°ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ ΡΠΈΡΠ΅ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π΅Π΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅ΡΡ Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ.
π² ΠΡ Π² MAX
π@BookPython | 793 |
| 5 | yield from β ΡΠ»Π΅Π³Π°Π½ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ β Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΡΠΎ for x in sub(): yield x. ΠΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΡΠ΅ ΠΈ ΠΌΠΎΡΠ½Π΅Π΅.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ yield from ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΠΏΠΎΠ΄Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π½Π°ΠΏΡΡΠΌΡΡ, Π±Π΅Π· Π»ΠΈΡΠ½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΎ ΡΠΈΡΠΊΠ° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΡΡΠΈ β ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΠΎΠ΄Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°.
ΠΠΎΡ ΠΊΠ»Π°ΡΡΠΈΠΊΠ°:
def gen():
for x in range(3):
yield x
def wrapper():
for x in gen():
yield x
ΠΠΎΠΆΠ½ΠΎ ΠΊΠΎΡΠΎΡΠ΅ ΠΈ Π»ΡΡΡΠ΅:
def wrapper():
yield from gen()
ΠΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β yield from ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ return-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΠ΄Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Python 3.3):
def sub():
yield 1
yield 2
return 'done'
def main():
result = yield from sub()
print('Sub returned:', result)
for _ in main():
pass
# ΠΡΠ²Π΅Π΄Π΅Ρ: Sub returned: done
Π Π΅ΡΡ ΡΠ΅ΡΠ΅Π· yield from ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π½ΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
:
def delegator():
result = yield from coroutine()
print('coroutine done:', result)
def coroutine():
x = yield
y = yield
return x + y
g = delegator()
next(g) # Π‘ΡΠ°ΡΡ
next(g) # coroutine ΠΆΠ΄Π΅Ρ x
g.send(10) # x = 10
print(g.send(20)) # y = 20 β return 30
# ΠΡΠ²Π΅Π΄Π΅Ρ: coroutine done: 30
ΠΡΠΎΠ³: Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ β ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ yield from Π΄Π°ΡΡ Π²Π°ΠΌ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΏΡΠΎΠ±ΡΠΎΡ return-Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
π² ΠΡ Π² MAX
π@BookPython | 776 |
| 6 | ΠΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ multiprocessing, ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (pickling). ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ ΡΠ°ΠΌ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ Π»ΡΠ±ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ args. ΠΡΠΈ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Π²ΠΎΡΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ:
import pickle
class TooMuchWeightError(Exception):
def __init__(self, weight):
super().__init__()
self._weight = weight
pickled = pickle.dumps(TooMuchWeightError(42))
pickle.loads(pickled)
ΠΡΠ·ΠΎΠ² TooMuchWeightError.__init__ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΠ·ΠΎΠ²Ρ Exception.__init__, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ args ΠΊΠ°ΠΊ ΠΏΡΡΡΠΎΠΉ ΠΊΠΎΡΡΠ΅ΠΆ. ΠΡΠΎΡ ΠΏΡΡΡΠΎΠΉ ΠΊΠΎΡΡΠ΅ΠΆ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅:
TypeError: __init__() missing 1 required positional argument: 'weight'
ΠΠ±Ρ
ΠΎΠ΄Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ super().__init__() (ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ ΠΏΡΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ), Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ²Π½ΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°:
class TooMuchWeightError(Exception):
def __init__(self, weight):
super().__init__(weight)
self._weight = weight
π² ΠΡ Π² MAX
π@BookPython | 879 |
| 7 | Π€ΡΠ½ΠΊΡΠΈΡ map Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
In : list(map(lambda x: x ** 2, [1, 2, 3]))
Out: [1, 4, 9]
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° β ΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΆ, Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. Π Python 2 ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΡΡΠ΅ΠΆΠ° (ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΊΠΎΠ±ΠΊΠΈ):
>>> map(lambda (a, b): a + b, [(1, 2), (3, 4)])
[3, 7]
Π Python 3 ΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΡΠ΅Π·Π»Π°, Π½ΠΎ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β itertools.starmap. ΠΠ½Π° ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΆΠΈ Π·Π° Π²Π°Ρ, Π±ΡΠ΄ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΎΠΉ: f(*arg) (ΠΎΡΡΡΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ):
from itertools import starmap
In [3]: list(starmap(lambda a, b: a + b, [(1, 2), (3, 4)]))
Out[3]: [3, 7]
π² ΠΡ Π² MAX
π@BookPython | 928 |
| 8 | Π€ΡΠ½ΠΊΡΠΈΡ super() ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ (Π±Π°Π·ΠΎΠ²ΠΎΠΌΡ) ΠΊΠ»Π°ΡΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Ρ
ΠΎΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎ-ΡΠΎ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΅Π³ΠΎ:
class BaseTestCase(TestCase):
def setUp(self):
self._db = create_db()
class UserTestCase(BaseTestCase):
def setUp(self):
super().setUp()
self._user = create_user()
ΠΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ super Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ" ΠΈΠ»ΠΈ "ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΈΠΉ". Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ»ΠΎΠ²ΠΎ super ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "Π²ΡΡΠ΅" (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»ΠΎΠ²Π΅ superintendent β Π·Π°Π²Π΅Π΄ΡΡΡΠΈΠΉ). ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ, super() Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ β ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΈ "ΡΠΎΡΠ΅Π΄Π½ΠΈΠΉ" ΠΊΠ»Π°ΡΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π±ΡΠ»Π° Π±Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ next(), ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (MRO β Method Resolution Order).
ΠΡΠΈΠΌΠ΅Ρ:
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
# Π²ΡΠ²ΠΎΠ΄ΠΈΡ 'right'
print(Bottom().foo())
ΠΠ±ΡΠ°ΡΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ super() ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ MRO Π²ΡΠ·Π²Π°Π²ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
>>> Bottom().foo()
'right'
>>> Left().foo()
'top'
π² ΠΡ Π² MAX
π@BookPython | 1 178 |
| 9 | Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΡΠ΅ΠΉ Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ globbing. Π¨Π°Π±Π»ΠΎΠ½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΡΠ΅ΠΉ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ globs.
$ echo /li*
/lib /lib64
Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ globbing Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ glob. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΠΌ ΡΠ°Π±Π»ΠΎΠ½, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ, Π° Python β Π½Π΅Ρ:
$ echo /zz**
/zz**
$ python -c 'from glob import glob; print(glob("/zz**"))'
[]
π² ΠΡ Π² MAX
π@BookPython | 1 030 |
| 10 | ΠΠ±ΡΡΠ½ΠΎ Π²Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅ΡΠ΅ Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ, Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Ρ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ next(gen). Π Python 3 Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ g.send(x). ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ Π²ΠΎΠ²ΡΠ΅ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅: Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π²Π½ΡΡΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ gen.throw(e) ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΠΉ ΡΠΎΡΠΊΠ΅, Π³Π΄Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ gen ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ β ΡΠΎ Π΅ΡΡΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ yield. ΠΡΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, gen.throw(e) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π· yield (ΠΈΠ»ΠΈ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ StopIteration, Π΅ΡΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π·Π°Π²Π΅ΡΡΡΠ½). ΠΡΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ.
def gen():
try:
yield 1
except ValueError:
yield 2
g = gen()
next(g)
# Out: 1
g.throw(ValueError)
# Out: 2
g.throw(RuntimeError('TEST'))
# RuntimeError: TEST
ΠΡΠ° ΡΠ΅Ρ
Π½ΠΈΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° β Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²Π½ΡΡΡΡ, Π½ΠΎ ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ
ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· yield. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ Π±ΡΠ²Π°ΡΡ ΡΠ΅Π΄ΠΊΠΎ, ΠΈ Π²ΡΡΡΠ΅ΡΠΈΡΡ g.throw Π² Π΄ΠΈΠΊΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅ ΠΏΠΎΡΡΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ @contextmanager ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ contextlib ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΡΡ ΡΠ΅Ρ
Π½ΠΈΠΊΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΊΠΎΠ΄Ρ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
from contextlib import contextmanager
@contextmanager
def atomic():
print('BEGIN')
try:
yield
except Exception:
print('ROLLBACK')
else:
print('COMMIT')
with atomic():
print('ERROR')
raise RuntimeError()
BEGIN
ERROR
ROLLBACK
π² ΠΡ Π² MAX
π@BookPython | 996 |
| 11 | π ΠΠΎΠ΄Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
IT ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Max
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, DevOps π
https://max.ru/i_odmin ΠΡΠ΅ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/bash_srv Bash Π‘ΠΎΠ²Π΅ΡΡ
https://max.ru/sysadminof ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
https://max.ru/i_odmin_book ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°
https://max.ru/i_devops DevOps: ΠΠΈΡΠ΅ΠΌ ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ.
https://max.ru/tipsysdmin Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ Π‘ΠΈΡΠ°Π΄ΠΌΠΈΠ½
https://max.ru/channel_win_sysadmin Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Windows
https://max.ru/channel_linux_admin Linux: Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ
https://max.ru/channel_linuxmod Linux
https://max.ru/channel_i_linux Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ
https://max.ru/channel_devopslib DevOps, SRE, Sysadmin
https://max.ru/channel_devops_star DevOps Star (ΠΠ²Π΅Π·Π΄Π° ΠΠ΅Π²ΠΎΠΏΡΠ°)
Excel Π»Π°ΠΉΡΡ
Π°ΠΊ π
https://t.me/Excel_lifehack Excel Π»Π°ΠΉΡΡ
Π°ΠΊ
ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ Ρ Π½ΡΠ»Ρ π¬π§
https://max.ru/UchuEnglish
1C ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/odin1c_rus CΡΠ°ΡΡΠΈ, ΠΊΡΡΡΡ, ΡΠΎΠ²Π΅ΡΡ, ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠ΄Π° 1Π‘
https://max.ru/channel_DevLab1C 1Π‘:ΠΡΠ΅Π΄ΠΏΡΠΈΡΡΠΈΠ΅ 8
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ C++π
https://max.ru/cpp_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° C/C++ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
https://max.ru/channel_cpp_geek C++ geek
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Goπ
https://max.ru/golang_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go (Golang) ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Reactπ
https://max.ru/react_lib React
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Rustπ
https://max.ru/channel_rust_lib
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Python π
https://max.ru/python_of Python Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ.
https://max.ru/BookPython ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/bookjava ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
https://max.ru/channel_java_geek Java Geek
GitHub Π‘ΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ π
https://max.ru/githublib ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ
(Data Base) π
https://max.ru/database_info ΠΡΠ΅ ΠΏΡΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° π
https://max.ru/frontend_1 ΠΠΎΠ΄Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ frontend ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ π
https://max.ru/programmist_of ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
https://max.ru/proglb ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
https://max.ru/bfbook ΠΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ π
https://max.ru/bookflow ΠΠ΅ΠΊΡΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ Ρ IT ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΉ
https://max.ru/itmozg ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ, Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΈΠ· ΠΌΠΈΡΠ° IT
https://max.ru/php_lib ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° PHP ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° π¨πΌβπ»π©βπ»
Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² π
https://max.ru/itumor Π¨ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
ΠΠ°ΡΠΈΡΠ°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ π
https://max.ru/thehaking ΠΠ°Π½Π°Π» ΠΎ ΠΊΠΈΠ±Π΅ΡΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
https://max.ru/xakkep_1 Π₯Π°ΠΊΠ΅Ρ Free
ΠΠ½ΠΈΠ³ΠΈ, ΡΡΠ°ΡΡΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ² π
https://max.ru/odesigners Π‘ΡΠ°ΡΡΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ Π΄Π»Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠ²
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° π
https://max.ru/Pomatematike ΠΠ°Π½Π°Π» ΠΏΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
https://max.ru/phismat_1 ΠΠ±ΡΡΠ°ΡΡΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅
ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ Π² ITπ
https://max.ru/progjob
https://max.ru/channel_rabotait
ΠΠΈΡ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ π
https://max.ru/mir_teh ΠΠ°Π½Π°Π» Π΄Π»Ρ Π»ΡΠ±ΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΠΠΎΡΠΎΠ΄ΡΠΊΠΈΠ΅π
https://max.ru/piterspb_78 Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³Π°
https://max.ru/mockva_life Π‘Π²Π΅ΠΆΠΈΠ΅ Π½ΠΎΠ²ΠΎΡΡΠΈ ΠΠΎΡΠΊΠ²Ρ
https://max.ru/piterspb ΠΠΈΡΠ΅Ρ ΠΠΎΠ²ΠΎΡΡΠΈ: Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ / Π‘ΠΠ / ΠΠ’Π
https://max.ru/channel_krasnodar_novosty ΠΡΠ°ΡΠ½ΠΎΠ΄Π°Ρ ΠΠΎΠ²ΠΎΡΡΠΈ
https://max.ru/channel_novosibirsk_novosti ΠΠΎΠ²ΠΎΡΠΈΠ±ΠΈΡΡΠΊ
https://max.ru/channel_samara_novosti ΠΠΎΠ²ΠΎΡΡΠΈ Π‘Π°ΠΌΠ°ΡΡ
https://max.ru/channel_ekaterinburg_novosti ΠΠΎΠ²ΠΎΡΡΠΈ ΠΠΊΠ°ΡΠ΅ΡΠΈΠ½Π±ΡΡΠ³Π°
https://max.ru/channel_kazan_novosti ΠΠΎΠ²ΠΎΡΡΠΈ ΠΠ°Π·Π°Π½ΠΈ
https://max.ru/channel_omsk_novosti ΠΠΎΠ²ΠΎΡΡΠΈ ΠΠΌΡΠΊΠ°
https://max.ru/channel_moskva_24 ΠΠΎΡΠΊΠ²Π° 24 | 796 |
| 12 | ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°ΡΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° __init__, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π»ΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ
ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΡΠΈΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ __init__ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ host ΠΈ port Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
:
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__.
π² ΠΡ Π² MAX
π@BookPython | 902 |
| 13 | Π§ΡΠΎΠ±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π»ΡΠ±ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ, Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ Π±Π°ΠΉΡΠΎΠ². Python, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅ΡΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π°Π½Π½ΡΠΌΠΈ, Π° Π½Π΅ ΠΈΡ
Π±Π°ΠΉΡΠΎΠ²ΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ ΡΡΡΠΎΠΊΡ Π² ΡΠ°ΠΉΠ», Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ
. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΠ°ΠΉΠ», ΠΈΡ
Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² Π±Π°ΠΉΡΡ β ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π±Π°ΠΉΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ Π·Π°Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ ΠΈΡ
Π² ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ β ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ β Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Unicode, Π½ΠΎ ΠΎΠ½ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π±Π°ΠΉΡΡ. Π ΡΠΌΡΡΠ»Π΅ Π±Π°ΠΉΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Unicode Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΎΠΉ. Unicode ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΈ ΠΈΡ
ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, π ΠΈΠΌΠ΅Π΅Ρ ΠΊΠΎΠ΄ 128013.
ΠΠΎ ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΈΡΠ»Π° Π² ΡΠ°ΠΉΠ», Π½ΡΠΆΠ½Π° Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ°. Unicode ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ utf-8, ΠΊΠΎΡΠΎΡΠ°Ρ (Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π²) ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π² Python. ΠΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΡΠ°ΠΉΠ»Π° Python Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ utf-8. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° encoding= ΡΡΠ½ΠΊΡΠΈΠΈ open, Π»ΠΈΠ±ΠΎ ΡΠΈΡΠ°ΡΡ Β«ΡΡΡΡΠ΅Β» Π±Π°ΠΉΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² b ΠΊ ΡΠ΅ΠΆΠΈΠΌΡ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°.
π² ΠΡ Π² MAX
π@BookPython | 978 |
| 14 | Π Python ΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
β Ellipsis, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ .... ΠΡΠ° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΌΠ΅ΡΡΠ°Ρ
, Π³Π΄Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠΌΠ΅ΡΡΠ½ΠΎ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NumPy ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Ellipsis Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° __getitem__, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: x[...] Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° x.
PEP 484 ΠΏΡΠΈΠ΄Π°ΡΡ Ellipsis Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Callable[..., type] β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΈΠΏ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±Π΅Π· ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ... ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π΅ΡΡ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°. ΠΡΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Python:
def x():
...
π² ΠΡ Π² MAX
π@BookPython | 956 |
| 15 | ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΡΠΎΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ.
Π asyncio, Π΅ΡΠ»ΠΈ ΠΊΠΎΡΡΡΠΈΠ½Π° Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΡΠΎΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ future. ΠΡΠ»ΠΈ await Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΌΠ΅ΡΡΠ°Ρ
, ΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ
ΠΏΠΎΠ»ΡΡΠΈΡ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ). Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΡΡΡ ΡΠ°Π·:
import asyncio
async def error():
await asyncio.sleep(1)
raise ValueError()
async def waiter(task):
try:
await task
except ValueError:
print('error')
else:
print('OK')
async def main():
task = asyncio.get_event_loop().create_task(error())
for _ in range(5):
asyncio.get_event_loop().create_task(waiter(task))
await asyncio.sleep(2)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
ΠΡΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ, Π½ΠΎ Π·Π°Π΄Π°ΡΠ° (task) Π½ΠΈ ΡΠ°Π·Ρ Π½Π΅ Π±ΡΠ»Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠ° (awaited), ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ΅ΡΡΠ½ΠΎ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: βTask exception was never retrievedβ.
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ await asyncio.gather(tasks) ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π·Π°Π΄Π°Ρ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π½Π°ΡΡΠΆΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Ρ Π²ΡΠ±ΡΠΎΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ:
import asyncio
async def error(i):
await asyncio.sleep(1)
raise ValueError(i)
async def main():
try:
await asyncio.gather(
error(1),
error(2),
error(3),
)
except ValueError as e:
print(e)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ gather Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ return_exceptions=True, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ: [42, ValueError(2,), ValueError(3,)]
import asyncio
async def error(i):
await asyncio.sleep(1)
if i > 1:
raise ValueError(i)
return 42
async def main():
results = await asyncio.gather(
error(1),
error(2),
error(3),
return_exceptions=True,
)
print(results)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
π² ΠΡ Π² MAX
π@BookPython | 1 000 |
| 16 | ΠΠ°ΠΊ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ Python-ΠΊΠΎΠ΄, Π½Π΅ Π²ΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° - Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ pdb.
π ΠΡΡΡΡΠ°Ρ ΠΎΡΠ»Π°Π΄ΠΊΠ° Ρ pdb
Π§Π°ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ, ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°ΡΡ print()-Π°ΠΌΠΈ. ΠΠΎ ΡΡΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ ΠΌΡΡΠΎΡΠΈΡ ΠΊΠΎΠ΄. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°Π²Ρ Π² Π½ΡΠΆΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΡΡΡΠΎΡΠΊΡ:
import pdb; pdb.set_trace()
ΠΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΉΠ΄Π΅Ρ Π΄ΠΎ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΡ ΠΏΠΎΠΏΠ°Π΄Π΅ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° ΠΏΡΡΠΌΠΎ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅. ΠΠ°Π»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ:
- n (next) β ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅;
- s (step) β Π·Π°ΠΉΡΠΈ Π²Π½ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ;
- c (continue) β ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
- l (list) β ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ;
- p var β Π²ΡΠ²Π΅ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ var.
π‘ ΠΡΠΈΠΌΠ΅Ρ
def calc(a, b):
import pdb; pdb.set_trace()
result = a + b
return result
calc(2, 3)
ΠΠ° ΡΡΡΠΎΠΊΠ΅ Ρ pdb.set_trace() ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ ΠΈ ΡΠΌΠΎΠΆΠ΅ΡΡ ΠΈΠ·ΡΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²Π½ΡΡΡΠΈ.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ?
- ΠΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ-ΡΠΎ ΠΈΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ.
- ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΏΡΡΠΌΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ.
- ΠΡΡΡΡΠΎ ΠΎΡΠ»Π°Π΄ΠΈΡΡ Π±Π΅Π· Π·Π°ΠΏΡΡΠΊΠ° IDE - ΡΠ΄ΠΎΠ±Π½ΠΎ Π² Docker, SSH ΠΈΠ»ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ cron.
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ - ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΎΡΠ²ΠΎΠΈΡΡ, ΠΈ ΡΠΆΠ΅ Π½Π΅ Π·Π°Ρ
ΠΎΡΠ΅ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ print().
π² ΠΡ Π² MAX
π@BookPython | 952 |
| 17 | Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΏΠΎΡΠ½ΡΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ:
a = b = c = 42
ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΉ Π² C, Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΠ½Π°ΡΠ΅. Π C ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ:
a = (b = (c = 42))
Π Python Π²ΡΡ Π½Π΅ ΡΠ°ΠΊ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, Π° Π½Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΉ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ:
2 0 LOAD_CONST 1 (42)
2 DUP_TOP
4 STORE_FAST 0 (a)
6 DUP_TOP
8 STORE_FAST 1 (b)
10 STORE_FAST 2 (c)
π² ΠΡ Π² MAX
π@BookPython | 1 003 |
| 18 | Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Ρ
Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΌ. Π₯Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ __hash__, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Ρ
Π΅ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ hash.
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ
Π΅ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠΆΠ΅ Ρ
Π΅ΡΠΈΡΡΠ΅ΠΌΡ, Π½ΠΎ Π΅ΡΡΡ Π½ΡΠ°Π½Ρ. ΠΡΠ»ΠΈ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ __eq__ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΈΠΏΠ°, ΡΠΎ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ __hash__ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ hash(a) == hash(b) Π΄Π»Ρ Π²ΡΠ΅Ρ
a ΠΈ b, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΠ°Π²Π½ΡΠΌΠΈ. ΠΠ°ΡΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ:
class A:
def __init__(self, x):
self.x = x
def __hash__(self):
return random.randrange(10000)
def __eq__(self, other):
return self.x == other.x
d = {}
d[A(2)] = 2
d.get(A(2), 0)
# ΠΡΠ²ΠΎΠ΄: 0
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ __eq__ Π² ΠΊΠ»Π°ΡΡΠ΅, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ __hash__ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡΠ°ΡΡΡΡ Π½Π΅ΡΠ°Π²Π½ΡΠΌΠΈ).
π² ΠΡ Π² MAX
π@BookPython | 1 001 |
| 19 | ΠΠ°ΠΊ Π±ΡΡΡΡΠΎ ΠΎΡΠΈΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π² Python?
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π²Π°ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΡΠΈΡΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠ° Π² Python ΠΈ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π»ΡΡΡΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ.
1οΈβ£ ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°
lst = [1, 2, 3, 4, 5]
lst = []
ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ, Π½ΠΎ ΡΡΠ°ΡΠ°Ρ ΡΡΡΠ»ΠΊΠ° ΠΎΡΡΠ°ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π΅ΡΠ»ΠΈ Π½Π° Π½Π΅Ρ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ.
2οΈβ£ ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ .clear()
lst = [1, 2, 3, 4, 5]
lst.clear()
ΠΠ΅ΡΠΎΠ΄ .clear() ΠΎΡΠΈΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π½Π° ΠΌΠ΅ΡΡΠ΅, Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±, Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΌΠ΅ΡΡΠ°Ρ
.
3οΈβ£ ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ del
lst = [1, 2, 3, 4, 5]
del lst[:]
Π Π°Π±ΠΎΡΠ°Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ .clear(), Π½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ.
4οΈβ£ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ
lst = [1, 2, 3, 4, 5]
del lst
ΠΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ lst. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΊ Π½Π΅ΠΉ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ, Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° NameError.
πΉ ΠΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π»ΡΡΡΠ΅?
β’ ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΈΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ .clear().
β’ ΠΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π½ΠΎΠ²ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ - lst = [].
β’ del lst[:] β ΡΠ΅Π΄ΠΊΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½.
β’ del lst ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π²Ρ? ΠΠΈΡΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
!
π² ΠΡ Π² MAX
π@BookPython | 1 048 |
| 20 | π 5 ΠΊΡΡΡΡΡ
Python-ΡΠΈΡΠ΅ΠΊ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
Π·Π½Π°ΡΡ Π½Π΅ Π²ΡΠ΅
Python β ΠΌΠΎΡΠ½ΡΠΉ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ·ΡΠΊ, Π½ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ Π·Π½Π°ΡΡ Π²ΡΠ΅Ρ
Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ ΠΏΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΡΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ.
1. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ else Π² for ΠΈ while
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅ Π·Π½Π°ΡΡ, ΡΡΠΎ Π² Python ΡΠΈΠΊΠ»Ρ for ΠΈ while ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π±Π»ΠΎΠΊ else. ΠΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΈΠΊΠ» Π½Π΅ Π±ΡΠ» ΠΏΡΠ΅ΡΠ²Π°Π½ ΡΠ΅ΡΠ΅Π· break.
β
ΠΡΠΈΠΌΠ΅Ρ:
numbers = [1, 3, 5, 7]
for num in numbers:
if num % 2 == 0:
print("ΠΡΡΡ ΡΡΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ!")
break
else:
print("Π§ΡΡΠ½ΡΡ
ΡΠΈΡΠ΅Π» Π½Π΅Ρ.")
πΉ ΠΡΠ»ΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅Ρ ΡΡΡΠ½ΡΡ
ΡΠΈΡΠ΅Π», ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ else.
2. "Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ.
β
ΠΡΠΈΠΌΠ΅Ρ:
a, b, c = 1, 2, 3
print(a, b, c) # 1 2 3
ΠΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±Π΅Π· Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ:
x, y = 5, 10
x, y = y, x
print(x, y) # 10 5
3. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ _ Π² Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠΈΡΠ»Π°Ρ
Π§ΡΠΎΠ±Ρ ΡΠΈΡΠ»Π° Π»Π΅Π³ΡΠ΅ ΡΠΈΡΠ°Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΡΠ°Π·ΡΡΠ΄Ρ _.
β
ΠΡΠΈΠΌΠ΅Ρ:
big_number = 1_000_000_000
print(big_number) # 1000000000
ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Ρ
Π°Ρ, Python ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ _ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ
.
4. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ Ρ Π·Π°ΠΏΠ°ΡΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ
ΠΠΌΠ΅ΡΡΠΎ if key in dict ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ .get(), ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ KeyError.
β
ΠΡΠΈΠΌΠ΅Ρ:
user_data = {"name": "Alice"}
age = user_data.get("age", 18) # ΠΡΠ»ΠΈ ΠΊΠ»ΡΡΠ° "age" Π½Π΅Ρ, Π²Π΅ΡΠ½ΡΡΡΡ 18
print(age) # 18
5. "Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°" ΡΠΏΠΈΡΠΊΠ° Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ * ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ.
β
ΠΡΠΈΠΌΠ΅Ρ:
def greet(name, age):
print(f"ΠΡΠΈΠ²Π΅Ρ, {name}! Π’Π΅Π±Π΅ {age} Π»Π΅Ρ.")
user_info = ["ΠΠ²Π°Π½", 25]
greet(*user_info) # ΠΡΠΈΠ²Π΅Ρ, ΠΠ²Π°Π½! Π’Π΅Π±Π΅ 25 Π»Π΅Ρ.
Π’ΠΎ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· **:
user_dict = {"name": "ΠΠ»ΡΠ³Π°", "age": 30}
greet(**user_dict)
ΠΡΠΈ ΡΠΈΡΠΊΠΈ Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½Π΅Π΅ ΠΈ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅.
π² ΠΡ Π² MAX
π@BookPython | 839 |
