en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels πŸ‘‰ If you want to see the tag, subscribe

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° | Книги ΠΏΠΎ ΠΏΠΈΡ‚ΠΎΠ½Ρƒ

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° | Книги ΠΏΠΎ ΠΏΠΈΡ‚ΠΎΠ½Ρƒ

Open in Telegram

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² 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.

17 977
Subscribers
-224 hours
-277 days
-9630 days
Attracting Subscribers
Oct '26
October '26
+17
in 0 channels
September '26
+36
in 0 channels
Get PRO
August '26
+37
in 0 channels
Get PRO
July '26
+35
in 0 channels
Get PRO
June '26
+23
in 0 channels
Get PRO
May '26
+40
in 0 channels
Get PRO
April '26
+26
in 0 channels
Get PRO
March '26
+31
in 0 channels
Get PRO
February '26
+62
in 0 channels
Get PRO
January '26
+69
in 0 channels
Get PRO
December '25
+67
in 0 channels
Get PRO
November '25
+97
in 31 channels
Get PRO
October '25
+64
in 1 channels
Get PRO
September '25
+90
in 36 channels
Get PRO
August '25
+60
in 0 channels
Get PRO
July '25
+89
in 27 channels
Get PRO
June '25
+116
in 19 channels
Get PRO
May '25
+119
in 44 channels
Get PRO
April '25
+164
in 37 channels
Get PRO
March '25
+147
in 38 channels
Get PRO
February '25
+178
in 31 channels
Get PRO
January '25
+176
in 33 channels
Get PRO
December '24
+158
in 34 channels
Get PRO
November '24
+112
in 33 channels
Get PRO
October '24
+139
in 29 channels
Get PRO
September '24
+190
in 29 channels
Get PRO
August '24
+68
in 17 channels
Get PRO
July '24
+56
in 0 channels
Get PRO
June '24
+95
in 23 channels
Get PRO
May '24
+223
in 18 channels
Get PRO
April '24
+174
in 0 channels
Get PRO
March '24
+240
in 20 channels
Get PRO
February '24
+224
in 18 channels
Get PRO
January '24
+287
in 23 channels
Get PRO
December '23
+253
in 24 channels
Get PRO
November '23
+282
in 16 channels
Get PRO
October '23
+319
in 18 channels
Get PRO
September '23
+342
in 0 channels
Get PRO
August '23
+264
in 0 channels
Get PRO
July '23
+292
in 0 channels
Get PRO
June '23
+211
in 0 channels
Get PRO
May '23
+284
in 0 channels
Get PRO
April '23
+240
in 0 channels
Get PRO
March '23
+419
in 0 channels
Get PRO
February '23
+147
in 0 channels
Get PRO
January '23
+247
in 0 channels
Get PRO
December '22
+191
in 0 channels
Get PRO
November '22
+174
in 0 channels
Get PRO
October '22
+283
in 0 channels
Get PRO
September '22
+268
in 0 channels
Get PRO
August '22
+287
in 0 channels
Get PRO
July '22
+322
in 0 channels
Get PRO
June '22
+233
in 0 channels
Get PRO
May '22
+258
in 0 channels
Get PRO
April '22
+252
in 0 channels
Get PRO
March '22
+380
in 0 channels
Get PRO
February '22
+207
in 0 channels
Get PRO
January '22
+315
in 0 channels
Get PRO
December '21
+211
in 0 channels
Get PRO
November '21
+269
in 0 channels
Get PRO
October '21
+326
in 0 channels
Get PRO
September '21
+286
in 0 channels
Get PRO
August '21
+486
in 0 channels
Get PRO
July '21
+420
in 0 channels
Get PRO
June '21
+368
in 0 channels
Get PRO
May '21
+350
in 0 channels
Get PRO
April '21
+387
in 0 channels
Get PRO
March '21
+568
in 0 channels
Get PRO
February '21
+572
in 0 channels
Get PRO
January '21
+777
in 0 channels
Get PRO
December '20
+18 545
in 0 channels
Date
Subscriber Growth
Mentions
Channels
27 October0
26 October0
25 October0
24 October0
23 October0
22 October+1
21 October0
20 October0
19 October+1
18 October0
17 October0
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 October0
05 October0
04 October0
03 October0
02 October+1
01 October+1
Channel Posts
НСкоторый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ вас Π΄Π°Π½Π½Ρ‹Π΅ Π² stdout, вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ API, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ строку, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΡƒΡŽ для использования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ВмСсто Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ контСкста 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. Π¨Π°Π±Π»ΠΎΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для сопоставлСния ΠΏΡƒΡ‚Π΅ΠΉ
Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΡƒΡ‚Π΅ΠΉ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ называСтся 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
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° | Книги ΠΏΠΎ ΠΏΠΈΡ‚ΠΎΠ½Ρƒ - Statistics & analytics of Telegram channel @bookpython