Pythoner
7.22K subscribers
860 photos
27 videos
4 files
654 links
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику.

Сотрудничество - @flattys
Цены - @serpent_media

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
👍72🗿2
Что выдаст код выше
Anonymous Quiz
36%
{1, 2, 3}
7%
{1, 1, 2, 3}
28%
{1, 2, 3, 1}
29%
Error
🤯7👍3🤔3👀21
🤔Разбор

Тут банально будет ошибка, потому что мы не можем складывать между собой множества.
Если бы мы хотели добавить элемент, мы бы писали a.add(1).


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥3😁2
✈️lambda — это анонимная функция, которая записывается в одну строку и не требует def. Используется там, где нужна простая операция без имени функции.

➡️ Пример. Обычная функция vs. lambda:
def square(x):
return x ** 2

square_lambda = lambda x: x ** 2

print(square(5)) # 25
print(square_lambda(5)) # 25


➡️Где используется?
1. map() — Применение функции к списку
nums = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, nums))
print(squared) # [1, 4, 9, 16]


2. filter() — Фильтрация данных
even = list(filter(lambda x: x % 2 == 0, nums))
print(even) # [2, 4]


3. sorted() — Сортировка по ключу
pairs = [(1, 'one'), (3, 'three'), (2, 'two')]
pairs.sort(key=lambda x: x[0])
print(pairs) # [(1, 'one'), (2, 'two'), (3, 'three')]


💡Когда использовать lambda?
- Когда функция простая и короткая
- Когда она нужна один раз

💡Не стоит использовать lambda, если логика сложная – лучше писать def.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125🔥4
✈️Миксин (mix-in, анг. “примесь”), паттерн проектирования в ООП, когда в цепочку наследования добавляется небольшой класс-помощник. Например, есть класс:
class NowMixin(object):
def now():
return datetime.datetime.utcnow()

🔫Тогда любой класс, наследованный с этим миксином, будет иметь метод now().

💡В названия миксинов принято добавлять слово Mixin, так как не существует никакого механизма для понимания полноценный это класс или миксин. Миксин технически является самым обычным классом.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76🔥2
✈️@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 делает код чище и безопаснее, улучшая инкапсуляцию!

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥3
✈️Не обязательно пользоваться сторонними сервисами вроде bit.ly — ты можешь сделать свою «сокращалку» буквально в пару строк на Python. Для этого есть библиотека pyshorteners.

➡️Пример:
import pyshorteners  

s = pyshorteners.Shortener()
url = "https://example.com/your-long-link-here"

print(s.tinyurl.short(url))
# Вывод: https://tinyurl.com/2p6n3x6d


🔫На выходе получаем короткую и удобную ссылку, которую можно использовать где угодно. Просто, быстро и полностью под твоим контролем.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84🔥3
✈️githubkit — это библиотека на Python, которая предлагает чистый и типизированный интерфейс для работы с API GitHub. Она позволяет разработчикам легко и быстро интегрировать функционал GitHub в свои приложения, минимизируя количество ошибок и облегчая процесс разработки.

➡️Пример:
from githubkit import GitHub, Response
from githubkit.versions.latest.models import FullRepository

# Создаем объект GitHub, передав токен доступа
github = GitHub("<ваш_token_здесь>")

# Выполняем запрос к API GitHub для получения репозитория
resp: Response[FullRepository] = github.rest.repos.get("owner", "repo")

# Получаем данные о репозитории
repo: FullRepository = resp.parsed_data

# Выводим название репозитория
print(repo.full_name)


💡Больше нет необходимости вручную обрабатывать HTTP-запросы, управлять токенами и разбираемыми JSON-ответами.

GitHub

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥3
4🔥3👍2
5👍3🔥3
🤔Разбор

В Python аргументы по умолчанию вычисляются один раз при определении функции, а не при каждом вызове.

Когда мы вызываем func(1) → список y создаётся один раз и сохраняется. В него добавляется 1. Результат: [1].
При вызове func(2) используется тот же самый список, в который уже добавлена 1. Теперь добавляется 2. Результат: [1, 2].
При вызове func(3, []) мы передаём новый пустой список вместо значения по умолчанию. В него добавляется 3. Результат: [3].
При вызове func(4) снова используется старый общий список, где уже [1, 2]. Добавляется 4. Результат: [1, 2, 4].


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3👍2
✈️Хочешь, чтобы твой скрипт принимал параметры из командной строки?
В Python для этого есть встроенный инструмент — argparse.


➡️Пример:
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--name', required=True, help='Имя пользователя')
parser.add_argument('--age', type=int, help='Возраст')

args = parser.parse_args()
print(f"Привет, {args.name}! Тебе {args.age} лет.")

🔫Как работает
Запускаем в терминале:
python script.py --name Алиса --age 25

Вывод:
Привет, Алиса! Тебе 25 лет.


💡Зачем это нужно?
- Удобно передавать параметры
- Можно добавлять флаги, типы, help-сообщения
- Работает из коробки — без установки сторонних библиотек

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥43
✈️По умолчанию атрибуты хранятся в словаре dict, но этот подход неэффективен по памяти, особенно если создаётся много однотипных объектов. 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)
- Ускоряет доступ к атрибутам
- Предотвращает создание лишних атрибутов

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥3
✈️Когда работаешь с большими массивами данных, производительность кода становится критически важной. Рассмотрим, как можно ускорить обработку данных, используя библиотеку NumPy вместо стандартных циклов Python.

➡️Проблема: медленные циклы
Допустим, у нас есть список чисел, и мы хотим возвести каждое число в квадрат:
data = list(range(1_000_000))
squared = [x**2 for x in data] # Медленно!


🔫Этот код работает, но на больших объемах данных циклы Python работают неэффективно, что может значительно замедлить выполнение программы.

➡️Решение: NumPy
Используем библиотеку NumPy, которая оптимизирована для работы с массивами:
import numpy as np

data_np = np.arange(1_000_000)
squared_np = data_np ** 2 # В десятки


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

💡Заключение
Если ваш код обрабатывает большие объемы данных, замена циклов Python на операции с NumPy может ускорить выполнение в 10–100 раз! Это особенно важно в научных вычислениях, анализе данных и машинном обучении, где скорость обработки данных критична.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86🔥3
🔥7👍21
Что выдаст код выше
Anonymous Quiz
73%
yh, nohtyp, ph
10%
yt, python, py
7%
yh, python, pn
11%
Error
👍73🤔2🤓2
🤔Разбор

Разбор кода по шагам:

s = "python"

1. s[1:5:2]

Формат среза: [start:stop:step]
start = 1, stop = 5 (не включительно), step = 2
Берём символы с индексами 1 и 3:
s[1] = 'y'
s[3] = 'h'
Результат: 'yh'

2. s[::-1]

Шаг -1 → идём с конца к началу → переворачиваем строку полностью
'python' → 'nohtyp'
Результат: 'nohtyp'

3. s[::3]

Шаг 3, start и stop не указаны → берём от начала до конца, каждый 3-й символ
Индексы, которые берём: 0, 3
s[0] = 'p'
s[3] = 'h'

Результат: 'ph'

Итоговый вывод:

'yh', 'nohtyp', 'ph'


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥54
✈️Метод getitem позволяет обращаться к объектам класса по индексу или ключу, как к спискам или словарям.

➡️Пример:
class CustomList:
def init(self, data):
self.data = data

def getitem(self, index):
return self.data[index] # Позволяет использовать obj[index]

nums = CustomList([10, 20, 30])
print(nums[1]) # 20


➡️Зачем нужен:
- Позволяет настроить доступ к элементам объекта.
- Делает объекты итерируемыми (например, в for-циклах).
- Помогает создавать свои структуры данных, работающие как списки или словари.

💡Заключение
getitem делает объекты гибкими и удобными в использовании, улучшая читаемость кода!

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥2
✈️UScrapper — это относительно новая библиотека Python, созданная для упрощения веб-скрапинга. Она предоставляет высокоуровневый интерфейс для извлечения данных с веб-страниц без необходимости писать много кода.

➡️UScrapper особенно полезен для начинающих разработчиков и для тех, кто хочет быстро получить структурированные данные без глубокого погружения в детали HTML, CSS-селекторов или XPath.

➡️Пример извлечение таблиц со страницы:
from uscrapper import extract_tables

url = "https://en.wikipedia.org/wiki/List_of_countries_by_population"
tables = extract_tables(url)

# Первые 5 строк первой таблицы
print(tables[0].head())


💡Заключение
Инструмент оснащен передовыми модулями обхода анти-парсинга и поддерживает технологии для извлечения информации из всех ссылок в пределах одного домена. Кроме того, в программе предусмотрена возможность создания отчета, содержащего все извлеченные данные.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🔥4
Если честно, меня бесят каналы, где непонятно кто учит программированию. На деле там копипаста с первой страницы гугла, которая грузит мозги.

Но есть и исключения. Например, канал @devsp. Его автор — ведущий разраб в области искусственного интеллекта. На минуточку, он приложил руку к самым нашумевшим нейронкам — Claude, Chat GPT и DeepSeek.

А теперь представьте, что мастодонт такого уровня ЛИЧНО делится внутрянкой своей работы и объясняет сложные концепции так, что поймёт даже отсталый двоечник.

Вещает про Data Science и машинное обучение с упором на практику (которой даже в платных курсах сильно не хватает).

Короче, если хотите быстро и без проблем расти в профессии — обязательно подпишитесь. Редко где найдешь такой баланс теории, подачи и практики: @devsp
4🤣2
✈️Global Interpreter Lock (GIL) — это механизм в CPython, который ограничивает выполнение Python-кода одним потоком за раз, даже на многопроцессорных системах.

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

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

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

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

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3🔥3