Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
VPS

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

Python β€” это высокоуровнСвый ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык программирования, созданный с Π°ΠΊΡ†Π΅Π½Ρ‚ΠΎΠΌ Π½Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ синтаксис. Π•Π³ΠΎ основныС встроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ β€” ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния, структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°Π»ΠΎΠΌ количСствС строк ΠΊΠΎΠ΄Π°.

Π­Ρ‚ΠΎΡ‚ справочник ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ случаи, распространённыС ошибки ΠΈ Π½ΡŽΠ°Π½ΡΡ‹, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°, выходящиС Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π²Π²ΠΎΠ΄Π½Ρ‹Ρ… руководств. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° сСрвСрС Π² срСдС VPS Π₯остинга, создаётС Django API ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ большиС Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, эти основы Π»Π΅ΠΆΠ°Ρ‚ Π² основС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса Python.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°

Ѐункция `print()`

`print()` ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² `stdout`. Π•Ρ‘ полная сигнатура:

β€œ`python

print(*objects, sep=' ', end='n', file=sys.stdout, flush=False)

β€œ`

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Π°ΠΆΠ½Ρ‹ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅:

  • `sep` управляСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π΅Π»).
  • `end` управляСт Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ символом (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки). Установка `end=''` критичСски Π²Π°ΠΆΠ½Π° для ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² прогрСсса ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΎΠ΄Π½Ρƒ строку.
  • `file` пСрСнаправляСт Π²Ρ‹Π²ΠΎΠ΄ Π² любой доступный для записи ΠΏΠΎΡ‚ΠΎΠΊ β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для записи структурированных Π»ΠΎΠ³ΠΎΠ² нСпосрСдствСнно Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
  • `flush=True` ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сбрасываСт Π±ΡƒΡ„Π΅Ρ€ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

β€œ`python

Practical example: progress output without newlines

import time

for i in range(5):

print(f"Processing step {i+1}/5…", end='r', flush=True)

time.sleep(0.5)

print("Done. ")

β€œ`

Ошибка: ИспользованиС `print()` для логирования Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-ΠΊΠΎΠ΄Π΅ являСтся Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `logging` β€” ΠΎΠ½ прСдоставляСт ΡƒΡ€ΠΎΠ²Π½ΠΈ логирования, врСмСнны́С ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ настраиваСмыС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π±Π΅Π· обращСния ΠΊ `stdout`.

Ѐункция `input()`

`input()` считываСт строку ΠΈΠ· `stdin`, удаляСт Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ символ Π½ΠΎΠ²ΠΎΠΉ строки ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Ρ‘ ΠΊΠ°ΠΊ `str`. АргумСнт ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ нСобязатСлСн, Π½ΠΎ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ скрипты.

β€œ`python

name = input("Enter your name: ")

print(f"Hello, {name}")

β€œ`

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай: `input()` Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ врСмя. Π’ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°Ρ… ΠΈΠ»ΠΈ скриптах, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° сСрвСрС, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² `input()` ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ зависанию процСсса. ВсСгда Π·Π°Ρ‰ΠΈΡ‰Π°ΠΉΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ запросы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ срСды ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `argparse` / `sys.argv` для Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ для числового Π²Π²ΠΎΠ΄Π°:

β€œ`python

try:

age = int(input("Enter your age: "))

except ValueError:

print("Invalid input: please enter a whole number.")

β€œ`

Никогда Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ `input()` Π±Π΅Π· Π±Π»ΠΎΠΊΠ° `try/except` Π² любом ΠΊΠΎΠ΄Π΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ интроспСкция Ρ‚ΠΈΠΏΠΎΠ²

`type()` ΠΈ `isinstance()`

`type()` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Однако Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-ΠΊΠΎΠ΄Π° `isinstance()` являСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ инструмСнтом, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования.

β€œ`python

num = 42

print(type(num)) # <class 'int'>

print(isinstance(num, int)) # True

print(isinstance(num, (int, float))) # True β€” checks multiple types at once

β€œ`

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ:

Π‘Π»ΡƒΡ‡Π°ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡΠ Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠ°Ρ функция
Вочная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° (Π±Π΅Π· подклассов)`type(x) is SomeClass`
ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° / с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ наслСдования`isinstance(x, SomeClass)`
ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΈ интроспСкция`type(x)`
Валидация с ΡƒΡ‚ΠΈΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ`hasattr(x, 'method_name')`

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²: `int()`, `float()`, `str()`, `bool()`

Π­Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-конструкторы для встроСнных Ρ‚ΠΈΠΏΠΎΠ² Python, Π° Π½Π΅ простыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ привСдСния Ρ‚ΠΈΠΏΠΎΠ². Они Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ `__init__` класса ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

β€œ`python

int() with a base argument β€” often overlooked

binary_str = "1010"

print(int(binary_str, 2)) # Output: 10 (binary to decimal)

print(int("0xFF", 16)) # Output: 255 (hex to decimal)

bool() truthiness rules

print(bool(0)) # False

print(bool("")) # False

print(bool([])) # False

print(bool("False")) # True β€” non-empty string is always truthy

β€œ`

Ошибка: `bool("False")` вычисляСтся ΠΊΠ°ΠΊ `True`, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это нСпустая строка. Π­Ρ‚ΠΎ застаёт ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² врасплох ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

`len()`

`len()` Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ `__len__` ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со строками, списками, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ, словарями, мноТСствами ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ классом, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ `__len__`.

β€œ`python

text = "Python"

print(len(text)) # 6

data = {"a": 1, "b": 2}

print(len(data)) # 2 β€” counts keys, not key-value pairs

β€œ`

Π“Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай: `len()` для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ `TypeError`, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `sum(1 for _ in generator)` для подсчёта элСмСнтов Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, хотя это исчСрпываСт Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния

УсловныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹: `if`, `elif`, `else`

Python вычисляСт условия, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΡΡ‚ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ, Π° Π½Π΅ строгоС Π±ΡƒΠ»Π΅Π²ΠΎ сравнСниС. ПониманиС Π»ΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

  • Π›ΠΎΠΆΠ½Ρ‹Π΅: `None`, `0`, `0.0`, `""`, `[]`, `{}`, `set()`, `False`
  • Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ являСтся истинным

β€œ`python

user_input = ""

if user_input:

print("Input received.")

else:

print("No input provided.") # This branch executes

β€œ`

Π’Π΅Ρ€Π½Π°Ρ€Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (встроСнноС условиС):

β€œ`python

status = "adult" if age >= 18 else "minor"

β€œ`

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ сопоставлСниС с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ (Python 3.10+): Для слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ вСтвлСния `match/case` Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ, Ρ‡Π΅ΠΌ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ `elif`:

β€œ`python

command = "start"

match command:

case "start":

print("Starting service…")

case "stop":

print("Stopping service…")

case _:

print("Unknown command.")

β€œ`

Π¦ΠΈΠΊΠ»Ρ‹: `for` ΠΈ `while`

Π¦ΠΈΠΊΠ»Ρ‹ `for` ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Ѐункция `range()` Π»Π΅Π½ΠΈΠ²ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ цСлочислСнныС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ эффСктивной ΠΏΠΎ памяти Π΄Π°ΠΆΠ΅ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ².

β€œ`python

range(start, stop, step)

for i in range(0, 10, 2):

print(i) # 0, 2, 4, 6, 8

β€œ`

`enumerate()` β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ индСкс, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования `range(len(iterable))`:

β€œ`python

fruits = ["apple", "banana", "cherry"]

for index, fruit in enumerate(fruits, start=1):

print(f"{index}. {fruit}")

β€œ`

Π¦ΠΈΠΊΠ»Ρ‹ `while` Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ явной Π»ΠΎΠ³ΠΈΠΊΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. ВсСгда ΡƒΠ±Π΅ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ условиС Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ `False`, ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ `break`:

β€œ`python

attempts = 0

max_attempts = 3

while attempts < max_attempts:

response = input("Enter password: ")

if response == "secret":

print("Access granted.")

break

attempts += 1

else:

The 'else' clause on a while loop executes if the condition

becomes False without hitting 'break' β€” a rarely used but powerful feature

print("Too many failed attempts.")

β€œ`

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова управлСния Ρ†ΠΈΠΊΠ»ΠΎΠΌ:

  • `break` β€” Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ†ΠΈΠΊΠ»
  • `continue` β€” пропускаСт остаток Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
  • `pass` β€” пустой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ Π² пустых Π±Π»ΠΎΠΊΠ°Ρ…

ВстроСнныС структуры Π΄Π°Π½Π½Ρ‹Ρ…

Π§Π΅Ρ‚Ρ‹Ρ€Π΅ основныС встроСнныС структуры Π΄Π°Π½Π½Ρ‹Ρ… Python ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ характСристики ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ подходящиС случаи использования.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ структур Π΄Π°Π½Π½Ρ‹Ρ… Python

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Π£ΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½Π°ΡΠ˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΠ°ΡΠ”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ΠšΠ»ΡŽΡ‡-ЗначСниСВрСмя поиска
`list`ДаДаДаНСтO(n)
`tuple`ДаНСтДаНСтO(n)
`dict`Π”Π° (3.7+)Π”Π°ΠšΠ»ΡŽΡ‡ΠΈ: НСтДаO(1) Π² срСднСм
`set`НСтДаНСтНСтO(1) Π² срСднСм
`frozenset`НСтНСтНСтНСтO(1) Π² срСднСм

Бписки

Бписки β€” это динамичСскиС массивы. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΡ… врСмСнна́я ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

β€œ`python

fruits = ["apple", "banana", "cherry"]

fruits.append("orange") # O(1) amortized β€” adds to end

fruits.insert(1, "mango") # O(n) β€” shifts elements right

fruits.remove("banana") # O(n) β€” searches then removes

popped = fruits.pop() # O(1) β€” removes from end

popped_idx = fruits.pop(0) # O(n) β€” removes from beginning, avoid in hot loops

List comprehension β€” faster than equivalent for loop

squares = [x**2 for x in range(10)]

β€œ`

Ошибка: ΠœΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ использованиС `list.insert(0, item)` ΠΈΠ»ΠΈ `list.pop(0)` β€” это O(n) Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Для повСдСния ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `collections.deque`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт O(1) Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ с ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†ΠΎΠ².

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ

Начиная с Python 3.7, словари ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ порядок вставки ΠΊΠ°ΠΊ ΡΠ·Ρ‹ΠΊΠΎΠ²ΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ (Π° Π½Π΅ просто Π΄Π΅Ρ‚Π°Π»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ).

β€œ`python

person = {"name": "Alice", "age": 30, "role": "engineer"}

Safe key access β€” avoids KeyError

city = person.get("city", "Unknown") # Returns "Unknown" if key absent

Iterating

for key, value in person.items():

print(f"{key}: {value}")

Dictionary comprehension

squared = {x: x**2 for x in range(5)}

Merging dicts (Python 3.9+)

defaults = {"timeout": 30, "retries": 3}

config = {"timeout": 60}

merged = defaults | config # config values override defaults

β€œ`

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π°

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, обСспСчивая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ принадлСТности со срСднСй ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ O(1) β€” Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ списки для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

β€œ`python

unique_ids = {101, 202, 303, 101} # Duplicate 101 is silently dropped

print(unique_ids) # {101, 202, 303}

Set operations β€” extremely useful for data deduplication

a = {1, 2, 3, 4}

b = {3, 4, 5, 6}

print(a & b) # Intersection: {3, 4}

print(a | b) # Union: {1, 2, 3, 4, 5, 6}

print(a – b) # Difference: {1, 2}

print(a ^ b) # Symmetric difference: {1, 2, 5, 6}

β€œ`

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ: `def`, `return` ΠΈ `lambda`

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `def`

β€œ`python

def calculate_discount(price, discount=0.10):

"""

Returns the discounted price.

Args:

price (float): Original price.

discount (float): Discount rate as a decimal. Default is 10%.

Returns:

float: Price after discount.

"""

return price * (1 – discount)

print(calculate_discount(100)) # 90.0

print(calculate_discount(100, 0.25)) # 75.0

β€œ`

`*args` ΠΈ `kwargs` ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ функциям ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

β€œ`python

def log_event(event_type, *messages, **metadata):

print(f"[{event_type}]", " | ".join(messages))

for key, value in metadata.items():

print(f" {key}: {value}")

log_event("ERROR", "Connection failed", "Retrying…", host="db01", port=5432)

β€œ`

Ошибка β€” измСняСмыС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (список, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ) Π² качСствС значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Он создаётся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅:

β€œ`python

WRONG β€” the list persists between calls

def add_item(item, items=[]):

items.append(item)

return items

CORRECT

def add_item(item, items=None):

if items is None:

items = []

items.append(item)

return items

β€œ`

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Лямбда-выраТСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ `sorted()`, `map()` ΠΈ `filter()`.

β€œ`python

Sorting a list of dicts by a specific key

users = [{"name": "Charlie", "age": 25}, {"name": "Alice", "age": 30}]

sorted_users = sorted(users, key=lambda u: u["age"])

filter() with lambda

even_numbers = list(filter(lambda x: x % 2 == 0, range(10)))

[0, 2, 4, 6, 8]

map() with lambda

doubled = list(map(lambda x: x * 2, [1, 2, 3]))

[2, 4, 6]

β€œ`

Когда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lambda: Если Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ слоТноС ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `def`. PEP 8 явно Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ лямбду ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” для этого ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ `def`.

Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

`open()`, `read()`, `write()` ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ `with`

Ѐункция `open()` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π•Ρ‘ полная сигнатура Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ `mode` ΠΈ `encoding`:

β€œ`python

Always specify encoding explicitly β€” avoids platform-dependent behavior

with open("data.txt", "r", encoding="utf-8") as f:

content = f.read()

β€œ`

Π Π΅ΠΆΠΈΠΌΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²:

РСТимОписаниС
`"r"`Π§Ρ‚Π΅Π½ΠΈΠ΅ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ `FileNotFoundError`, Ссли Ρ„Π°ΠΉΠ» отсутствуСт.
`"w"`Π—Π°ΠΏΠΈΡΡŒ. Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ усСкаСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС.
`"a"`Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅. Π‘ΠΎΠ·Π΄Π°Ρ‘Ρ‚ Ρ„Π°ΠΉΠ», Ссли отсутствуСт, добавляСт Π² ΠΊΠΎΠ½Π΅Ρ†, Ссли присутствуСт.
`"x"`ЭксклюзивноС созданиС. Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ `FileExistsError`, Ссли Ρ„Π°ΠΉΠ» сущСствуСт.
`"b"`Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ (ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ: `"rb"`, `"wb"`).
`"+"`Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись (ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ: `"r+"`, `"w+"`).

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ чтСния:

β€œ`python

Read entire file into memory β€” fine for small files

with open("config.txt", "r", encoding="utf-8") as f:

content = f.read()

Read line by line β€” memory-efficient for large files (logs, datasets)

with open("server.log", "r", encoding="utf-8") as f:

for line in f:

process(line.strip())

Read all lines into a list

with open("hosts.txt", "r", encoding="utf-8") as f:

lines = f.readlines()

β€œ`

ΠŸΠΎΡ‡Π΅ΠΌΡƒ `with` обязатСлСн Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅: ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ `with` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° контСкста (`__enter__` / `__exit__`), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°. Π ΡƒΡ‡Π½ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² `f.close()` Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ΅Π½ β€” Ссли ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π΄ΠΎ `close()`, дСскриптор Ρ„Π°ΠΉΠ»Π° ΡƒΡ‚Π΅ΠΊΠ°Π΅Ρ‚.

Ошибка: ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ `"w"` Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ усСкаСт Π΅Π³ΠΎ Π΄ΠΎ нуля Π±Π°ΠΉΡ‚, Π΅Ρ‰Ρ‘ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅. Если Π»ΠΎΠ³ΠΈΠΊΠ° записи Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, исходноС содСрТимоС ΡƒΠΆΠ΅ потСряно. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌ `"x"` ΠΈΠ»ΠΈ записывайтС Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΠΉΡ‚Π΅:

β€œ`python

import os

import tempfile

with tempfile.NamedTemporaryFile("w", delete=False, encoding="utf-8") as tmp:

tmp.write(new_content)

tmp_path = tmp.name

os.replace(tmp_path, "config.txt") # Atomic on POSIX systems

β€œ`

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

`import`, `from … import` ΠΈ `as`

БистСма ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Python β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π΅Ρ‘ Π³Π»Π°Π²Π½Ρ‹Ρ… ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон. Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ, сСтСвоС взаимодСйствиС, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

β€œ`python

import math

print(math.sqrt(144)) # 12.0

print(math.ceil(4.2)) # 5

print(math.floor(4.9)) # 4

Import specific names into the current namespace

from os.path import join, exists, dirname

Alias long module names

import numpy as np

import pandas as pd

β€œ`

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для сСрвСрного Python:

ΠœΠΎΠ΄ΡƒΠ»ΡŒΠΠ°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
`os` / `pathlib`ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, Ρ€Π°Π±ΠΎΡ‚Π° с путями
`sys`БостояниС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, `argv`, `stdin`/`stdout`/`stderr`
`subprocess`Запуск систСмных процСссов ΠΈ взаимодСйствиС с Π½ΠΈΠΌΠΈ
`logging`ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с уровнями ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ
`json`БСриализация/дСсСриализация Π΄Π°Π½Π½Ρ‹Ρ… JSON
`re`РСгулярныС выраТСния
`datetime`АрифмСтика Π΄Π°Ρ‚ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
`collections``deque`, `Counter`, `defaultdict`, `OrderedDict`
`itertools`Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΎ памяти ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ
`functools``lru_cache`, `partial`, `reduce`
`threading` / `multiprocessing`ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ
`socket`НизкоуровнСвоС сСтСвоС взаимодСйствиС
`hashlib`ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (SHA-256, MD5 ΠΈ Π΄Ρ€.)

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сторонними ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ

Помимо стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Python Package Index (PyPI) содСрТит Π±ΠΎΠ»Π΅Π΅ 500 000 ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `pip` для ΠΈΡ… установки ΠΈ всСгда Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния:

β€œ`bash

Create and activate a virtual environment

python3 -m venv .venv

source .venv/bin/activate # Linux/macOS

.venvScriptsactivate.bat # Windows

Install packages

pip install requests flask gunicorn

Freeze dependencies for reproducible deployments

pip freeze > requirements.txt

Recreate environment on another machine

pip install -r requirements.txt

β€œ`

Ошибка: Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² глобально (Π±Π΅Π· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния) загрязняСт систСмный Python ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ. На ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-сСрвСрС VPS Π₯остинга всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ окруТСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° сСрвСрС

ПониманиС ΠΊΠΎΠΌΠ°Π½Π΄ Python β€” это лишь ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹. НадёТный запуск ΠΊΠΎΠ΄Π° Python Π² сСрвСрной срСдС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сообраТСний.

ΠŸΡ€ΠΈ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΈ прилоТСния Flask ΠΈΠ»ΠΈ Django Π½Π° VPS с cPanel ΠΈΠ»ΠΈ Π½Π° чистом Linux VPS стандартный Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

  1. WSGI-сСрвСр (Gunicorn, uWSGI) для обслуТивания Python-прилоТСния
  2. ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ прокси (Nginx, Apache) для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SSL-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈ статичСских Ρ„Π°ΠΉΠ»ΠΎΠ²
  3. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ процСссов (systemd, Supervisor) для поддСрТания Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния послС сбоСв ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ
  4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния для сСкрСтов (Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ…Π°Ρ€Π΄ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅)

β€œ`bash

Example: running a Flask app with Gunicorn

gunicorn –workers 4 –bind 0.0.0.0:8000 wsgi:app

Example: systemd service unit for auto-restart

/etc/systemd/system/myapp.service

[Unit]

Description=My Python App

After=network.target

[Service]

User=deploy

WorkingDirectory=/var/www/myapp

ExecStart=/var/www/myapp/.venv/bin/gunicorn –workers 4 –bind 0.0.0.0:8000 wsgi:app

Restart=always

[Install]

WantedBy=multi-user.target

β€œ`

Для рСсурсоёмких Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ инфСрСнс машинного обучСния ΠΈΠ»ΠΈ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, GPU Π₯остинг прСдоставляСт ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ CUDA, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ NumPy, TensorFlow ΠΈ PyTorch.

Если вашС Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ отправляСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ письма ΠΈΠ»ΠΈ управляСт списками рассылки, использованиС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСрвиса Email Π₯остинга обСспСчиваСт Π½Π°Π΄Ρ‘ΠΆΠ½ΡƒΡŽ доставку ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ настройку SPF/DKIM вмСсто использования локальной установки `sendmail`.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ²

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ это ΠΊΠ°ΠΊ справочник ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΊΠΎΠ΄Π°:

  • Π’Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄: Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ `print()` ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `logging` Π² любом ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π±Π΅Π· присмотра. ВсСгда ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ `input()` Π² `try/except ValueError`.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ²: ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ `isinstance()` вмСсто `type()` для Π»ΠΎΠ³ΠΈΠΊΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ `bool("False")` β€” это `True`.
  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `dict` ΠΈΠ»ΠΈ `set` для поиска O(1). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `collections.deque` вмСсто `list`, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Никогда Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ измСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ всС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ строками Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
  • Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ: ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `with open(…)` ΠΈ всСгда явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ `encoding="utf-8"`. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΡƒΡŽ запись для критичСски Π²Π°ΠΆΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².
  • ΠœΠΎΠ΄ΡƒΠ»ΠΈ: ВсСгда Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния. ЀиксируйтС зависимости с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `pip freeze > requirements.txt`.
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»Π°ΡƒΠ·ΡƒΠ»Ρƒ `else` Π² Ρ†ΠΈΠΊΠ»Π°Ρ… `for`/`while` для Π»ΠΎΠ³ΠΈΠΊΠΈ послС Ρ†ΠΈΠΊΠ»Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `match/case` (Python 3.10+) для слоТного вСтвлСния.
  • Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ WSGI-сСрвСр, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ процСссов ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния для сСкрСтов. Никогда Π½Π΅ запускайтС сСрвСр Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Flask Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ `print()` ΠΈ `logging` Π² Python?

`print()` записываСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² `stdout` Π±Π΅Π· ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΠΎΠ΄ΡƒΠ»ΡŒ `logging` прСдоставляСт ΡƒΡ€ΠΎΠ²Π½ΠΈ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΡΡ‚ΠΈ (`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`), врСмСнны́С ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ настраиваСмыС мСста Π²Ρ‹Π²ΠΎΠ΄Π°. Для любого скрипта, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ сСрвис, `logging` β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ инструмСнт.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ `input()` Π² Python всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку?

`input()` считываСт Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ· `stdin` ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΊΠ°ΠΊ тСкст. Python Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ввСсти число, Π΄Π°Ρ‚Ρƒ ΠΈΠ»ΠΈ строку, поэтому Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ (`str`) ΠΈ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΊ явной Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ бСзопаснСС нСявного привСдСния Ρ‚ΠΈΠΏΠΎΠ².

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ `list` ΠΈ `set` ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ принадлСТности?

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° `x in my_list` β€” это O(n): Python сканируСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° `x in my_set` β€” это O(1) Π² срСднСм, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ мноТСства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ нСсколькими дСсятками элСмСнтов, Π³Π΄Π΅ Π²Ρ‹ часто провСряСтС ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² `set` обСспСчиваСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ускорСниС.

Когда слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `lambda` вмСсто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `def`?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `lambda` Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `sorted()`, `map()`, `filter()`). Если Π»ΠΎΠ³ΠΈΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΈΠ»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Ρ‘ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `def`. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ `lambda` ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ явно Π½Π΅ рСкомСндуСтся PEP 8.

Как автоматичСски Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Python-скрипт Π½Π° Linux-сСрвСрС послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ?

НаиболСС Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” это ΡŽΠ½ΠΈΡ‚-сСрвис `systemd` с `Restart=always` ΠΈ `WantedBy=multi-user.target`. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ скрипт Π² `crontab` с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `@reboot /path/to/venv/bin/python /path/to/script.py`. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ `systemd` ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ обСспСчиваСт Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· `journalctl`, упорядочиваниС зависимостСй ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ пСрСзапуска.