byteofpython | Unsorted

Telegram-канал byteofpython - 🐍 Укус питона 🐍

2619

🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки. 👽 Админ - @it_dashka 🔊 Купить рекламу: https://telega.in/c/byteofpython 👉 Чат: @abyteofpython 👉 Поделиться с друзьями: @byteofpython

Subscribe to a channel

🐍 Укус питона 🐍

Зачем используется метод querySelectorAll() в JavaScript и когда его применять?

Метод querySelectorAll() возвращает список всех элементов, соответствующих указанному CSS-селектору. Это удобно, когда нужно сразу получить несколько элементов для обработки или изменений.

Пример:

<ul>
<li class="item">Apple</li>
<li class="item">Banana</li>
<li class="item">Orange</li>
</ul>

<script>
const items = document.querySelectorAll(".item");
items.forEach(el => el.style.color = "blue");
</script>


📌В этом примере querySelectorAll() выбирает все элементы с классом item и меняет их цвет

querySelectorAll() удобно использовать при работе со списками, карточками, формами и динамическими интерфейсами. Он поддерживает любые CSS-селекторы и позволяет легко применять массовые изменения к группе элементов

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 Замыкания (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 к "питонистому" коду

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 Мутабельность 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) при изменении создают новый объект.

📌 Понимание мутабельности — ключ к тому, чтобы не ломать данные «по ссылке» и писать предсказуемый код

Читать полностью…

🐍 Укус питона 🐍

Зачем используется метод 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, конфигурациями или базами, где некоторые ключи могут отсутствовать. Это делает код надёжнее и чище, чем использование прямого доступа через []

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 slice — гибкая нарезка последовательностей

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

➡️ Пример:

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

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


📌 Удобно, когда нужно часто брать одинаковые фрагменты из списков, строк или других последовательностей

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 any — есть ли хотя бы одно совпадение

Функция any() возвращает True, если хотя бы один элемент итерируемого объекта истинный.

Удобна для быстрых проверок в списках и генераторах


➡️ Пример:

numbers = [1, 3, 5, 8]

if any(n % 2 == 0 for n in numbers):
print("Есть чётное число")


📌 Делает код короче и понятнее, чем ручные циклы с проверками

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 dict.get — безопасный доступ к значениям словаря

Метод dict.get() возвращает значение по ключу, но если ключа нет — выдаёт None или указанное значение по умолчанию

➡️ Пример:

user = {"name": "Анна", "age": 25}

print(user.get("name")) # Анна
print(user.get("city")) # None
print(user.get("city", "—")) # —


📌 Удобно для работы с неполными данными и избежания ошибок KeyError

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 all — проверка условий для коллекции

Функция all() возвращает True, если все элементы итерируемого объекта истинные.

Полезно для валидации данных и упрощения проверок


➡️ Пример:

numbers = [2, 4, 6, 8]

if all(n % 2 == 0 for n in numbers):
print("Все числа чётные")


📌 Удобнее, чем писать несколько and, особенно при проверке списков и генераторов

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 collections.namedtuple — удобные кортежи с именами

namedtuple из модуля collections создаёт кортежи, у которых есть имена полей.

Это делает код более читаемым по сравнению с обычными кортежами


➡️ Пример:

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(2, 5)

print(p.x, p.y) # 2 5


📌 Такой объект лёгкий как кортеж, но использовать его удобнее, чем словарь или класс

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 itertools.product — все комбинации элементов

itertools.product() создаёт декартово произведение — все возможные комбинации элементов из нескольких последовательностей

➡️ Пример:

from itertools import product

colors = ["red", "green"]
sizes = ["S", "M", "L"]

for combo in product(colors, sizes):
print(combo)

('red', 'S')
('red', 'M')
('red', 'L')
('green', 'S')
('green', 'M')
('green', 'L')


📌 Полезно при генерации вариантов, тестов или переборе параметров

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 *args и kwargs — гибкие аргументы функций

В Python можно передавать переменное количество аргументов в функцию:

🟢*args собирает позиционные аргументы в кортеж

🟢**kwargs собирает именованные аргументы в словарь

➡️ Пример:

def show_info(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)

show_info(1, 2, 3, name="Анна", age=25)

args: (1, 2, 3)
kwargs: {'name': 'Анна', 'age': 25}


📌 Удобно для написания универсальных функций и работы с динамическими параметрами

Читать полностью…

🐍 Укус питона 🐍

Зачем используется метод pop() в Python и когда его применять?

Метод pop() удаляет элемент из списка по индексу и возвращает его. По умолчанию убирается последний элемент. Это удобно, когда нужно извлечь и использовать данные, одновременно убрав их из коллекции.

Пример:

numbers = [10, 20, 30, 40]

last = numbers.pop()
print(last) # ➜ 40
print(numbers) # ➜ [10, 20, 30]

first = numbers.pop(0)
print(first) # ➜ 10
print(numbers) # ➜ [20, 30]


📌В этом примере pop() сначала удаляет последний элемент, затем — первый.

pop() удобно использовать при работе со стеками и очередями, а также когда нужно пошагово обрабатывать список, убирая уже использованные элементы

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 property — управление доступом к атрибутам

Декоратор @property позволяет превратить метод класса в атрибут, добавив к нему логику при чтении или записи.

➡️ Пример:

class User:
def __init__(self, name):
self._name = name

@property
def name(self):
return self._name.title()

u = User("анна")
print(u.name) # Анна


📌 Удобно для валидации, форматирования и инкапсуляции, не меняя интерфейс класса

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 hasattr — проверка наличия атрибута

Функция hasattr() позволяет проверить, есть ли у объекта указанный атрибут.
Возвращает True или False.

➡️ Пример:

class User:
def __init__(self, name):
self.name = name

u = User("Анна")

print(hasattr(u, "name")) # True
print(hasattr(u, "age")) # False


📌 Полезно для динамической работы с объектами и безопасного доступа к их свойствам

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 globals() — доступ к глобальным переменным

Функция globals() возвращает словарь всех глобальных переменных текущего модуля.
Можно использовать для динамического доступа к переменным по имени.

➡️ Пример:

x = 42
name = "Python"

print(globals()["x"]) # 42
print(globals()["name"]) # Python


📌 Полезно для отладки, метапрограммирования и работы с динамическими именами, но в обычном коде лучше использовать напрямую

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 Как 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 помогает избегать неожиданных конфликтов имён и багов при работе с функциями и замыканиями

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 Как 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 важно понимать: присваивание не копирует данные, а лишь создаёт новую ссылку.
Отсюда рождаются большинство «неожиданных» багов у новичков

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 enumerate — индексы без лишнего кода

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

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


➡️ Пример:

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

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

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


📌 Код становится чище и читаемее, особенно при работе со списками и строками

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 collections.Counter — подсчёт элементов

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

➡️ Пример:

from collections import Counter

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

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


📌 Удобно для анализа данных, статистики и поиска самых частых элементов

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 iter — превращаем объект в итератор

Функция iter() делает любой итерируемый объект (список, строку, словарь) итератором, которым можно управлять вручную.

➡️ Пример:

nums = [10, 20, 30]
it = iter(nums)

print(next(it)) # 10
print(next(it)) # 20
print(next(it)) # 30


📌 Полезно для пошагового перебора и создания собственных итераторов

Читать полностью…

🐍 Укус питона 🐍

Зачем используется метод update() у словарей в Python и когда его применять?

Метод update() позволяет обновить словарь новыми парами ключ–значение. Если ключ уже существует — его значение будет перезаписано. Это удобный способ объединять и изменять данные в словарях.

Пример:

user = {"name": "Alice", "age": 25}
update_data = {"age": 26, "city": "New York"}

user.update(update_data)
print(user)
# ➜ {'name': 'Alice', 'age': 26, 'city': 'New York'}


📌В этом примере update() изменяет возраст и добавляет новый ключ city.

update() удобно использовать при работе с конфигурациями, обновлении записей из БД, объединении параметров и настройке объектов. Метод делает код компактным и понятным

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 reversed — итерация в обратном порядке

Функция reversed() позволяет пройтись по последовательности с конца к началу без создания копии списка

➡️ Пример:

nums = [1, 2, 3, 4, 5]

for n in reversed(nums):
print(n, end=" ")

5 4 3 2 1


📌 Удобно для перебора или печати в обратном порядке без лишних операций.

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 ord и chr — связь символов и чисел

В Python каждый символ имеет числовой код (Unicode).

ord() возвращает код символа
chr() превращает число обратно в символ

➡️ Пример:

print(ord("A"))   # 65
print(chr(65)) # A


📌 Эти функции полезны при работе с кодировками, шифрованием и преобразованием текста

Читать полностью…

🐍 Укус питона 🐍

Зачем используется оператор in в Python и когда его применять?

Оператор in проверяет, содержится ли элемент в последовательности (строке, списке, кортеже, множестве или словаре). Это удобный и читаемый способ выполнять проверки принадлежности.

Пример:

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

print("apple" in fruits) # ➜ True
print("grape" in fruits) # ➜ False


📌В этом примере оператор in проверяет, есть ли элемент в списке.

in удобно использовать для поиска в коллекциях, фильтрации данных, проверки ключей в словарях и работы с текстом. Он делает код компактным и понятным, избавляя от явных циклов

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 zip — объединение коллекций по элементам

Функция zip() объединяет элементы нескольких последовательностей в кортежи по индексам.
Работает до конца самой короткой коллекции

➡️ Пример:

names = ["Анна", "Борис", "Вера"]
scores = [95, 88, 76]

for name, score in zip(names, scores):
print(f"{name}: {score}")

Анна: 95
Борис: 88
Вера: 76


📌 Удобно для параллельного перебора списков

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 name == "main" — точка входа в программу

В Python каждый файл можно запускать напрямую или импортировать как модуль.
Переменная __name__ помогает отличить эти случаи.

➡️ Пример:

def greet():
print("Привет!")

if __name__ == "__main__":
greet() # выполнится только при прямом запуске файла


📌 Это позволяет писать код, который работает и как самостоятельная программа, и как импортируемый модуль без лишних запусков

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 isinstance vs type — как правильно проверять типы

В Python для проверки типа объекта есть два подхода:

type(obj) — строгая проверка на конкретный класс
isinstance(obj, Class) — проверка с учётом наследования.

➡️ Пример:

class Animal: pass
class Dog(Animal): pass

d = Dog()

print(type(d) == Animal) # False
print(isinstance(d, Animal)) # True


📌 Обычно лучше использовать isinstance, так как он учитывает наследование и делает код гибче

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 getattr — доступ к атрибутам по имени

Функция getattr() возвращает значение атрибута объекта по строковому имени.

Если атрибута нет, можно указать значение по умолчанию.


➡️ Пример:

class User:
def __init__(self, name):
self.name = name

u = User("Анна")

print(getattr(u, "name")) # Анна
print(getattr(u, "age", "неизвестно")) # неизвестно


📌 Удобно для динамического доступа к свойствам объектов, например при работе с данными из JSON или API

Читать полностью…

🐍 Укус питона 🐍

Зачем используется метод append() в Python и когда его применять?

Метод append() добавляет элемент в конец списка. Это один из самых распространённых способов динамически расширять коллекцию.

Пример:

fruits = ["apple", "banana"]
fruits.append("orange")
print(fruits)
# ➜ ['apple', 'banana', 'orange']


📌В этом примере append() добавляет новый элемент "orange" в конец списка.

append() удобно использовать при работе с динамическими данными: сборе результатов в циклах, формировании очередей, накоплении элементов для дальнейшей обработки. Этот метод делает работу со списками гибкой и интуитивно понятной

Читать полностью…

🐍 Укус питона 🐍

👩‍💻 frozenset — неизменяемое множество

frozenset — это множество, элементы которого нельзя изменять после создания.

Оно поддерживает те же операции, что и обычный set: объединение, пересечение, разность.


➡️ Пример:

a = frozenset([1, 2, 3])
b = frozenset([3, 4, 5])

print(a & b) # пересечение → frozenset({3})


📌 Удобно, когда нужно использовать множество как ключ в словаре или элемент другого множества

Читать полностью…
Subscribe to a channel