🐍 Укус питона 🐍
2.49K subscribers
1.06K photos
23 videos
285 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
👩‍💻 slice — гибкая нарезка последовательностей

Объект slice позволяет задавать срезы с шагом и использовать их многократно, вместо написания вручную.

➡️ Пример:

data = [0, 1, 2, 3, 4, 5, 6]

s = slice(1, 6, 2) # от 1 до 5 с шагом 2
print(data[s]) # [1, 3, 5]


📌 Удобно, когда нужно часто брать одинаковые фрагменты из списков, строк или других последовательностей
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
👩‍💻 collections.Counter — подсчёт элементов

Counter из модуля collections автоматически считает количество вхождений элементов в коллекции.

➡️ Пример:

from collections import Counter

fruits = ["яблоко", "банан", "яблоко", "груша", "банан", "яблоко"]
count = Counter(fruits)

print(count) # Counter({'яблоко': 3, 'банан': 2, 'груша': 1})
print(count.most_common(1)) # [('яблоко', 3)]


📌 Удобно для анализа данных, статистики и поиска самых частых элементов
Please open Telegram to view this post
VIEW IN TELEGRAM
Зачем используется метод get() у словарей в Python и когда его применять?

Метод get() возвращает значение по ключу, если он существует, и безопасно возвращает заданное значение по умолчанию, если ключ не найден. Это предотвращает ошибки при доступе к несуществующим ключам.

Пример:

user = {"name": "Alice", "age": 25}

print(user.get("age")) # ➜ 25
print(user.get("city", "N/A")) # ➜ N/A


📌В этом примере get() безопасно возвращает значение "N/A", если ключ city отсутствует.

get() удобно использовать при работе с данными из API, JSON, конфигурациями или базами, где некоторые ключи могут отсутствовать. Это делает код надёжнее и чище, чем использование прямого доступа через []
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
👩‍💻 enumerate — индексы без лишнего кода

enumerate() добавляет индекс к каждому элементу итерируемого объекта.

Чаще всего используется в циклах вместо range(len(...)).


➡️ Пример:

fruits = ["яблоко", "банан", "груша"]

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

1 яблоко
2 банан
3 груша


📌 Код становится чище и читаемее, особенно при работе со списками и строками
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Мутабельность vs Иммутабельность в Python

В Python объекты делятся на изменяемые (mutable) и неизменяемые (immutable).

Это фундамент — от него зависят поведение списков, кортежей и даже ошибки с «копиями»


➡️ Пример:

a = [1, 2, 3]
b = a
b.append(4)

print(a) # [1, 2, 3, 4]
print(a is b) # True


b не копия, а ссылка на тот же объект в памяти. Изменяемые типы (list, dict, set) ведут себя именно так. А вот неизменяемые (int, str, tuple) при изменении создают новый объект.

📌 Понимание мутабельности — ключ к тому, чтобы не ломать данные «по ссылке» и писать предсказуемый код
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
👩‍💻 Как Python хранит переменные: ссылки, а не значения

В Python переменные — это не “коробки с данными”, а имена, указывающие на объекты в памяти.

Когда ты присваиваешь значение, создаётся объект, а имя просто ссылается на него.


➡️ Пример:

x = [1, 2, 3]
y = x
y.append(4)

print(x) # [1, 2, 3, 4]
print(x is y) # True


x и y указывают на один и тот же объект — изменения отражаются в обоих. Чтобы создать независимую копию, нужно использовать copy() или модуль copy.

📌 В Python важно понимать: присваивание не копирует данные, а лишь создаёт новую ссылку.
Отсюда рождаются большинство «неожиданных» багов у новичков
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Замыкания (closures) — функции, которые помнят контекст

В Python функция может «запомнить» значения из внешней области, даже если она уже не существует.
Это и есть замыкание — ключевой инструмент для инкапсуляции логики и данных без классов


➡️ Пример:

def make_multiplier(factor):
def multiply(x):
return x * factor
return multiply

double = make_multiplier(2)
print(double(5)) # 10


multiply помнит значение factor, даже после завершения make_multiplier. То есть double — это функция, замкнувшая внутри себя factor = 2.

📌 Замыкания лежат в основе декораторов, фабрик функций и ленивых вычислений.
Понимание этой концепции — шаг от простого Python к "питонистому" коду
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
👩‍💻 Как Python ищет переменные (LEGB Rule)

Когда ты обращаешься к переменной, Python ищет её не хаотично, а строго по цепочке LEGB:
Local → Enclosing → Global → Built-in

➡️ Пример:

x = "глобальная"

def outer():
x = "замыкание"
def inner():
x = "локальная"
print(x)
inner()

outer()

локальная


Если убрать x = "локальная", Python возьмёт x из ближайшей внешней области — "замыкание".
Если и там нет — из глобальной.

📌 Понимание LEGB помогает избегать неожиданных конфликтов имён и багов при работе с функциями и замыканиями
Please open Telegram to view this post
VIEW IN TELEGRAM