byteofpython | Unsorted

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

2619

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

Subscribe to a channel

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

Зачем используется конструкция if name == "main" в Python и когда её применять?

Конструкция if name == "main" используется для того, чтобы запускать часть кода только при прямом выполнении файла, а не при его импорте как модуля. Это важно для разделения логики запуска и повторного использования кода.

✅ Пример:

def greet():
print("Hello!")

if name == "main":
greet()


📌 В этом примере функция greet() вызовется только если файл запущен напрямую, но не при импорте его в другой модуль.

if name == "main" удобно использовать для тестирования, запуска скриптов и избежания лишнего выполнения кода при импорте.

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

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

🔹 Как работает оператор in в Python

Оператор in проверяет, содержит ли последовательность заданное значение. Работает с строками, списками, кортежами, множествами и словарями.

➡️ Пример:

letters = ['a', 'b', 'c']
print('b' in letters) # True

word = "python"
print('y' in word) # True

user = {'name': 'Alice', 'age': 30}
print('name' in user) # True (ключ проверяется)


Полезен для фильтрации, поиска и проверок наличия элемента.

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

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

Списковые выражения (List Comprehensions)

Списковое выражение — это компактный способ создать список на основе другого и сразу применить к нему трансформацию или фильтр.

➡️ Пример:

# Квадраты чётных чисел от 0 до 9
squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares) # [0, 4, 16, 36, 64]


✔️ Такой способ короче и читаемее, чем использование цикла for. Подходит для простых операций над списками.

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

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

⚙️ Работа с множествами в Python

Множество (set) — это коллекция уникальных элементов без определённого порядка.

Главное применение set — быстро удалять дубликаты и проверять наличие элемента.

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

unique_nums = set(nums)
print(unique_nums) # {1, 2, 3, 4, 5}

print(3 in unique_nums) # True
print(10 in unique_nums) # False


✔️ Множества полезны для оптимизации кода и быстрого поиска данных

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

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

⚙️ Мифы о байесовском А/Б тестировании

В статье сравнивают частотный и байесовский подходы к A/B тестам. Показывают, как учитывать априорные данные, разобраться с p-value и безопасно остановить эксперимент раньше времени.

#Полезное

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

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

🐍 Множественное присваивание в Python

В Python можно сразу присвоить значения нескольким переменным в одной строке. Это удобно и делает код короче.

x, y, z = 1, 2, 3
print(x, y, z) # 1 2 3


Можно использовать для обмена значениями без временной переменной:
a, b = 5, 10
a, b = b, a
print(a, b) # 10 5


✅ Это стандартный приём в Python, который экономит строки и делает код читаемым.

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

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

🐍 Форматированные строки (f-strings) в Python

F-строки — это самый лаконичный способ подставить переменные и выражения прямо внутрь строки. Они появились в Python 3.6 и с тех пор стали стандартом.

Синтаксис простой: перед строкой ставится f, а внутри фигурных скобок {} можно писать переменные или даже выражения.

name = "Анна"
age = 25

print(f"{name} — {age} лет")


Внутри скобок можно использовать любые валидные выражения:
print(f"{name.upper()} — {age + 5} лет")  # АННА — 30 лет


Преимущество f-строк — читаемость и производительность. Они короче и быстрее, чем .format() или конкатенация через +.

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

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

Что делает @property в Python?

@property превращает метод класса в свойство, позволяя обращаться к нему без скобок.

Пример:

class Person:
def init(self, name):
self._name = name

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

p = Person("Alice")
print(p.name) # Alice (как атрибут, но с логикой)


Зачем нужно?

Позволяет использовать методы как атрибуты
Защищает данные от прямого изменения
Позволяет добавить логику без изменения интерфейса

⚡️ @property делает код чище и безопаснее, улучшая инкапсуляцию!

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

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

↔️ Разница между is и == в Python

🔹 == (равенство) проверяет, равны ли значения объектов:

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (значения одинаковые)


🔹 is (идентичность) проверяет, указывают ли переменные на один и тот же объект в памяти:
print(a is b)  # False (разные объекты)


🔹 Но для immutable-объектов (например, int, str, tuple) Python кеширует значения:
x = 256
y = 256
print(x is y) # True (указывают на один объект)


✅ Используйте == для сравнения значений и is для проверки, ссылаются ли переменные на один объект в памяти!

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

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

🔥 Mutable vs Immutable в Python

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

🔹 Неизменяемые (immutable): нельзя изменить после создания
int, float, str, tuple, frozenset

x = "hello"
x += " world" # Создается новый объект, а не изменяется старый


🔹 Изменяемые (mutable): можно изменять без создания нового объекта
list, dict, set, bytearray
lst = [1, 2, 3]
lst.append(4) # Список изменяется в той же области памяти


⚠️ Важный нюанс

Передача изменяемых объектов в функцию может привести к неожиданным изменениям:

def modify_list(lst):
lst.append(99) # Изменяет оригинальный список!

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]


✅ Вывод:

Используйте tuple, если данные не должны изменяться.
Будьте осторожны с изменяемыми объектами при передаче в функции.
Если нужно копирование, используйте .copy() или deepcopy().

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

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

🖥 Друзья, если вы только начинаете осваивать Python или уже перешли к фреймворкам и сложным библиотекам, вам помогут авторские материалы многолетнего разработчика и преподавателя Python Дмитрия Читалова.

Уже размещены:
✅Основы Python
✅Продвинутый Python
✅Алгоритмы и структуры данных

❗️Сейчас еженедельно выкладываются уроки по Архитектуре и паттернам проектирования

Подписаться можно здесь.

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

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

Зачем нужно ключевое слово yield в Python?

yield используется для создания генераторов, которые возвращают данные по мере запроса, вместо хранения всего результата в памяти.

Пример:

def count_up_to(n):
count = 1
while count <= n:
yield count # Возвращает значение и приостанавливает выполнение
count += 1

for num in count_up_to(5):
print(num)


yield позволяет приостанавливать и возобновлять выполнение функции, экономя память и упрощая работу с потоками данных.

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

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

Что такое дескрипторы в Python и зачем они нужны?

Дескриптор — это объект, который управляет доступом к атрибутам класса через методы get, set и delete. Они позволяют гибко контролировать поведение атрибутов.

✅ Пример:

class Descriptor:
def init(self, value=None):
self.value = value

def get(self, instance, owner):
print("Getting value")
return self.value

def set(self, instance, value):
print("Setting value")
self.value = value

class MyClass:
attr = Descriptor()

obj = MyClass()
obj.attr = 42 # Setting value
print(obj.attr) # Getting value → 42


Дескрипторы используются в свойствах (property), ORM, логировании доступа и валидации данных. Они помогают гибко управлять состоянием объектов и позволяют писать более чистый код.

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

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

🔍 Как работает staticmethod vs classmethod в Python?

В Python есть два специальных декоратора для методов класса: @staticmethod и @classmethod. Они позволяют работать без создания экземпляра, но имеют ключевые различия.

✅ Пример:

class Example:
class_attr = "Hello"

@staticmethod
def static_method():
return "I'm a static method"

@classmethod
def class_method(cls):
return f"Class method: {cls.class_attr}"

print(Example.static_method()) # I'm a static method
print(Example.class_method()) # Class method: Hello


@staticmethod ведёт себя как обычная функция внутри класса, не имея доступа к атрибутам класса или экземпляра. @classmethod, наоборот, получает ссылку на класс (cls) и может изменять его атрибуты.

Используйте @staticmethod для независимых функций, а @classmethod, когда нужно работать с самим классом.

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

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

Автоматизация тестирования desktop приложений с помощью Dogtail

В статье рассмотрим, как Dogtail заменил Appium для тестирования отечественных Linux-приложений. Разберём его работу с GTK и Qt, взаимодействие через ATK и DBus, а также опыт использования.

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

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

Ускорить Pandas в 60 раз: проверяем лайфхаки из интернета на реальном проекте и обкладываемся бенчмарками

Вместо очередных «топов» — реальные бенчмарки. Я покажу, как советы по ускорению Pandas могут замедлить код, и какие из них реально работают в зависимости от ситуации

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

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

🔹 Аргументы по умолчанию в Python

Функции в Python могут принимать аргументы со значениями по умолчанию.

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

➡️ Пример:

def greet(name, greeting="Привет"):
print(f"{greeting}, {name}!")

greet("Алиса") # Привет, Алиса!
greet("Боб", "Здравствуйте") # Здравствуйте, Боб!


Такой подход упрощает код и делает функции более универсальными.

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

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

⚙️ Работа с if-else в Python

if-else — это условная конструкция в Python для проверки условий.

Синтаксис:

x = 10

if x > 5:
print("Больше 5")
else:
print("Меньше или равно 5")


Можно добавлять elif (дополнительные условия):
x = 3

if x > 5:
print("Больше 5")
elif x == 5:
print("Равно 5")
else:
print("Меньше 5")


✔️ if-else помогает управлять логикой программы и выполнять код в зависимости от условий.

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

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

❓ Для чего используется функция enumerate() в Python и когда её применять?

Функция enumerate() позволяет перебрать элементы последовательности вместе с их индексами. Это удобно, когда нужен не только элемент, но и его позиция в коллекции.

✅ Пример:

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

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

1 apple
2 banana
3 orange


📌 В этом примере enumerate() вернёт кортежи с индексом и значением.

enumerate() удобно использовать вместо range(len()) для более чистого и читаемого кода при переборе списков, кортежей и других коллекций.

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

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

🐍 Функция range() в Python

range() — встроенная функция для генерации чисел. Используется для перебора в цикле.

Синтаксис:

range(начало, конец, шаг)


По умолчанию: начало = 0, шаг = 1.

Пример:

# Простой range от 0 до 2
for i in range(3):
print(i)

# Range с началом и шагом
for i in range(1, 10, 2):
print(i)

# Вывод:
# 0
# 1
# 2
# 1
# 3
# 5
# 7
# 9

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

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

⚙️ Списковые включения (list comprehensions)

В Python можно создавать списки в одну строку — с помощью списковых включений. Это короче и читаемее, чем for-цикл.

squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]


Можно добавить условие:
evens = [x for x in range(10) if x % 2 == 0]


Это базовый, но мощный инструмент в Python.

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

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

🔥 Что такое slots в Python и зачем он нужен?

slots ограничивает список атрибутов у экземпляров класса, экономя память за счет отказа от dict.

Обычный класс без slots:

class Person:
def init(self, name, age):
self.name = name
self.age = age

p = Person("Alice", 25)
p.city = "New York" # Можно добавить новый атрибут


✅ Класс с slots:
class Person:
slots = ("name", "age") # Разрешены только эти атрибуты

def init(self, name, age):
self.name = name
self.age = age

p = Person("Alice", 25)
p.city = "New York" # ❌ AttributeError: 'Person' object has no attribute 'city'


➕ Плюсы slots

Экономит память (не создается dict)
Ускоряет доступ к атрибутам
Предотвращает создание лишних атрибутов

⚡️ Используйте slots, если нужно много однотипных объектов и важна производительность!

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

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

⚙️ Как я запускаю 15+ самых разных ИИ на своей машине — open-source, self-hosted, с HTTP-доступом

Показываю, как мой BrainBox запускает генерацию, озвучку и распознавание локально — без боли и зависимости от облаков. Даже если вы не знаете Python.

#Полезное

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

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

🔥 *args и **kwargs в Python

🔹 *args — передает позиционные аргументы как кортеж:

def add_numbers(*args):
return sum(args)

print(add_numbers(1, 2, 3)) # 6


🔹 **kwargs — передает именованные аргументы как словарь:
def greet(**kwargs):
print(kwargs)

greet(name="Alice", age=25) # {'name': 'Alice', 'age': 25}


✅ Используйте *args для списка значений и **kwargs для гибких параметров!

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

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

⚙️ Отладка с sys._getframe в Python

Сегодня в коротком формате разберемся с тем, что же творится внутри CPython, когда функции вызывают друг друга: sys._getframe, f_back, f_globals, f_locals, а также создадим свои декораторы.

#Полезное

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

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

🐍 GIL в Python: как это влияет на многопоточность

Global Interpreter Lock (GIL) — это механизм в CPython, который ограничивает выполнение Python-кода одним потоком за раз, даже на многопроцессорных системах.

🔹 Зачем нужен GIL?

Он предотвращает проблемы с управлением памятью и упрощает работу интерпретатора. Однако из-за него многопоточные программы не могут эффективно использовать несколько ядер процессора.

🔹 Когда GIL мешает?

В CPU-интенсивных задачах (например, обработка данных, вычисления) многопоточность не дает прироста производительности.

В I/O-интенсивных задачах (сетевые запросы, работа с файлами) GIL почти не влияет, так как потоки могут освобождать блокировку во время ожидания операций ввода-вывода.

✅ Решение:

Если нужна настоящая параллельность, используйте многопроцессорность (multiprocessing), которая запускает отдельные процессы без GIL, или попробуйте альтернативные реализации Python, такие как Jython или PyPy.

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

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

⚡️ Как работает super() в Python?

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

✅ Пример:

class Parent:
def greet(self):
return "Hello from Parent"

class Child(Parent):
def greet(self):
return super().greet() + " and Child"

obj = Child()
print(obj.greet()) # "Hello from Parent and Child"


super() особенно полезен при множественном наследовании, так как помогает вызывать методы родительских классов без явного указания их имен.

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

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

⚙️ Как работает metaclass в Python?

В Python метаклассы управляют созданием классов, так же как классы управляют созданием объектов. Они позволяют автоматизировать и настраивать процесс создания классов.

✅ Пример:

class Meta(type):
def new(cls, name, bases, dct):
dct["custom_attr"] = 42
return super().new(cls, name, bases, dct)

class MyClass(metaclass=Meta):
pass

print(MyClass.custom_attr) # 42


Метаклассы позволяют добавлять атрибуты, проверять код, изменять поведение классов перед их созданием.

Это мощный инструмент, но его стоит использовать только при необходимости, например, в ORM, фреймворках и API.

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

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

Что делает метод new в Python и когда его использовать?

Метод new отвечает за создание нового экземпляра класса перед его инициализацией в init. Он используется в случаях, когда нужно контролировать процесс создания объекта, например, в синглтонах или при наследовании от неизменяемых типов (int, str, tuple).

✅ Пример использования:

class Singleton:
_instance = None

def new(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance

obj1 = Singleton()
obj2 = Singleton()

print(obj1 is obj2) # True (оба объекта — одна и та же ссылка)


В отличие от init, new контролирует сам процесс создания объекта. Полезен для ограничения числа экземпляров и работы с неизменяемыми классами.

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

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

🔄 Как работает itertools.chain в Python?

itertools.chain позволяет объединять несколько итерируемых объектов в один, не создавая новых списков. Это экономит память и делает код чище.

✅ Пример:

from itertools import chain

list1 = [1, 2, 3]
list2 = [4, 5, 6]

for num in chain(list1, list2):
print(num) # 1 2 3 4 5 6


Обычно для объединения списков используют +, но это создаёт новый список в памяти.

chain
позволяет перебирать элементы последовательно, без лишних затрат, что особенно полезно при работе с большими наборами данных или генераторами.

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