Получи случайную криптовалюту за регистрацию!

CoolPython

Логотип телеграм канала @coolpython — CoolPython C
Логотип телеграм канала @coolpython — CoolPython
Адрес канала: @coolpython
Категории: Технологии
Язык: Русский
Количество подписчиков: 5.72K
Описание канала:

Канал об основах Python и хороших практиках разработки. Создаём системность в обрывочных знаниях.
Тем, кто хочет понимать, что пишет!

Рейтинги и Отзывы

3.50

2 отзыва

Оценить канал coolpython и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

1

2 звезд

0

1 звезд

0


Последние сообщения

2022-10-27 12:40:00 Фича f-строк, о которой вы не знали

Смотрите, вот обычная f-строка

>>> text = 'JUPI'
>>> print(f'{text}')
JUPI

Если я добавлю в нее
* двоеточие,
* символ-заполнитель,
* и укажу требуемую длину строки с помощью символа <

>>> print(f'{text:-<15}')

То не занятый текстом остаток строки будет заполнен выбранным символом:

JUPI-----------

Если указать длину строки через >, то можно заполнить строку с левой стороны:

>>> print(f'{text:->15}')
-----------JUPI

Напишите в комментариях, как заполнить строку с обоих сторон, чтобы получилось

-----JUPI------

Подсказка: можно поискать вот здесь
7.4K views09:40
Открыть/Комментировать
2022-10-24 13:34:05 Сегодня в 18:00 UTC+2 релизят Python 3.11 в прямом эфире, смотреть можно по ссылке ниже:





UPD: еще можно подписаться на их youtube, чтобы не пропускать релизы в будущем, если вам интересно
7.0K viewsedited  10:34
Открыть/Комментировать
2022-07-08 16:43:12 Работа import и структура проекта

Когда вы импортируете какой-то модуль в вашем коде, питон не учитывает, в каком файле этот импорт находится, влияет только то, как был запущен код.
Если модуль не был раньше загружен, питон пытается его найти по очереди в нескольких папках, которые можно посмотреть в переменной sys.path

По умолчанию она содержит примерно такие каталоги:
* каталог, добавляемый при запуске
* каталоги указанные в переменной окружения PYTHONPATH
* каталог текущего активированного виртуального окружения
* каталог установки python

1. Если вы запускаете ваш скрипт командой python scriptname.py, то первым в списке будет тот каталог, где находится запускаемый скрипт. Текущий каталог не имеет значения.
2. Если вы запускаете ваш код командой python -m packagename, то первым в списке будет текущий каталог. При запуске питон попытается найти и импортировать packagename по общим правилам.
3. Если вы запускаете код с помощью других инструментов вроде pytest, они тоже могут сами добавлять что-то в sys.path.

Скорее всего, вам не стоит самостоятельно менять sys.path, так как алгоритм его заполнения стандартный и привычен для всех. Если по каким-то причинам вас он не устраивает, возможно у вас неверная структура проекта.

Так как поиск пакетов для импорта происходит сначала в каталоге "проекта", стоит быть аккуратным именованием ваших файлов и каталогов. Если вы случайно назовете ваш модуль так же как встроенный или сторонний, при любом импорте такого модуля будет грузиться именно ваш, что сломает работу кода.

Иногда используемые нами фреймворки поддерживают только определенную, не всегда оптимальную, структуру проекта. В остальных случаях я могу предложить два подхода:

1. Вынести запускаемые скрипты на верхний уровень, а остальной код упаковать в пакет.

Упаковка кода в пакет с уникальным именем позволяет исключить конфликты имен. А вынесение всех запускаемых файлов на один уровень делает состав sys.path предсказуемым.

Выглядеть это будет примерно так:

├── appname
│ ├── __init__.py
│ ├── other_module.py
│ └── some_module.py
├── cli_module.py
└── requirements.txt

2. Создать распространяемый пакет (рекомендую).

В этом случае вы упаковываете весь код в пакет, что помогает исключить конфликты имен.
Для запуска команд вы можете использовать синтаксис python -m appname.cli_module или заполнить секцию entry_points в файле с описанием проекта (setup.cfg, pyproject.toml), после чего иметь свои кастомные консольные команды. В обоих случаях вы сможете запускать код, находясь в любом каталоге, без необходимости указывать полные пути к файлам.

Для удобства разработки с таким подходом удобно устанавливать пакет в editable-режиме с помощью команды типа pip install -e .

Структура будет примерно такой:

├── pyproject.toml
└── src
└── appname
├── __init__.py
├── cli_module.py
├── other_module.py
└── some_module.py

Дополнительные материалы:
* https://packaging.python.org/en/latest/
* https://docs.python.org/3/reference/import.html
* https://docs.python.org/3/library/sys.html#sys.path
* https://ru.wikipedia.org/wiki/Рабочий_каталог
7.2K views13:43
Открыть/Комментировать
2022-06-18 23:56:33 Я опять сделала группу, можно покомментить и покидаться какашками

UPD Правила игры те же: нетоксично про питон, программирование, инфраструктуру и за жизнь. Но нужно быть пуськой.

UPD2 https://t.me/+CgNMmJwzjYI1MmYy
7.5K viewsedited  20:56
Открыть/Комментировать
2022-06-18 23:45:35 У ШАДа есть отличный коллективно написанный учебник по машинному обучению. Как раз недавно появился. В нем сочетается и довольно серьезное изложение того, как все работает (считаем, что читатель не боится математики), и рассказ про некоторые особенности применения этого всего на практике.

При этом сохраняется определенный уровень простоты изложения: для большинства людей оно и правда будет выглядеть слишком математично, но на уровне физтеха/мехмата/вмк это конечно не математический курс, а легкая прогулка солнечным днем в городском парке с непринужденным обсуждением таблицы умножения. Что однако не умаляет полезности учебника, т.к. количество интегралов и наличие сигма-алгебр в тексте не заставляет алгоритмы работать лучше :)

Для меня было большим удовольствием написать для учебника ШАД главу про кластеризацию. Задача была непростой: написать очень кратко, рассказать про самые популярные методы, но при этом ответить на вопрос, где это все используется так, что применение кластеризации оправдано. Последнее особенно любопытный вопрос. Сделать кластеризацию просто так, «потому что могу» - дело не хитрое. А вот оправданных применений гораздо меньше, чем у классификации, регрессии или ранжирования.

Мне очень нравится то, что вышло в итоге. Для меня эта глава не просто конспект лекции, а настоящее искусство. Можно сказать, что я писал ее не только сейчас, но и десять лет до этого. Совершенно точно нужно сказать, что я писал свою главу с заботой и любовью к читателю - так, как я мог ее выразить. Кроме того, я писал такой текст, который я бы хотел прочитать 12 лет назад и сэкономить годы на понимание каких-то несложных, но важных вещей и сопоставление разных источников. Мой путь в машинном обучении тоже начался с unsupervised learning, и мне было важно рассказать про кластеризацию так, чтобы каждый смог насладиться красотой и сложностью этой задачи, получить конкретные знания и не испугаться их применять, но в то же время не попасть в обманчивое впечатление, что «все тут легко решается». Я надеюсь, что у меня получилось)

Вот ссылка на главу, с той же страницы можно перейти на список всех глав: https://ml-handbook.ru/chapters/clustering/intro

Большое спасибо Стасу Федотову, что позвал поучаствовать не только на этапе обсуждения содержания учебника и составления итогового списка глав, но и в написании конкретной главы. Также спасибо Насте Павловской за обсуждения плана моей главы и добросовестное допинывание меня до осуществления задумки. Стас, Настя, вы супер :)
6.3K views20:45
Открыть/Комментировать
2022-06-18 23:45:35 Делюсь с вами коллективным учебником по машинному обучению из Яндекса. На самом деле наполовину делюсь, наполовину сохраняю себе, чтобы прочитать позже. Теплый привет Вите Кантору
5.0K views20:45
Открыть/Комментировать
2022-05-20 12:06:14 / и * в определнии функции

Видели когда-нибудь вот такой синтаксис?

def foo(first, /, second, *, third):
print(first, second, third)

Выглядит странно?

На самом деле / и * навязывают положение ключевых и позиционных аргументов.

Попытаемся, например, вызвать foo() с неправильным набором параметров:

>>> foo("bar", "qux")
...
TypeError: foo() missing 1 required keyword-only argument: 'third'

Нужен keyword аргумент, окей, укажем все параметры:

>>> foo("bar", "baz", "qux")
...
TypeError: foo() takes 2 positional arguments but 3 were given

А, один из них по ключу:

>>> foo("bar", "baz", third="qux")
bar baz qux

Получилось!

Оба символа опциональны. И, в моем опыте, если ставят, то чаще только звездочку.

Источник: https://docs.python.org/3/tutorial/controlflow.html#special-parameters

7.3K viewsedited  09:06
Открыть/Комментировать
2022-04-27 15:11:58 Пара фактов о численных типах
(которые вы, возможно, не знали)

Факт 1

В Python есть три встроенных численных типа. Кроме int и float, которыми мы обычно пользуемся, есть еще complex — комплексные числа.

Комплексные числа много используют в математике (например, с их помощью можно брать некоторые забористые интегралы, которые обычным способом не берутся), и в физике (особенно в расчетах, связанных с электричеством и магнетизмом).

Сконструировать комплексное число в Python можно так:

a = complex(2, 1)

или вот так:

a = 2 + 1j

Получится одно и то же.

Факт 2

Все численные типы в Python унаследованы от класса Number. Проверить это можно так:

from numbers import Number

isinstance(1984, Number) #True
isinstance(3.1415926, Number) #True
isinstance(1j, Number) #True

Кстати, сюрприз: bool тоже унаследован от Number:

isinstance(False, Number) #True

Факт 3

Под капотом логический тип — те же числа, только bool имеет всего два значения: 0 и 1. Это обеспечивает нам легкое приведение True к единице, а False к нулю.

Это же, впрочем, дает ни разу не интуитивное поведение в некоторых случаях:

1/False # ZeroDivisionError: division by zero

True * 1 # 1
False * 1 # 0

complex(True, 3.9) # (1+3.9j)

my_list = [1, 2, 3, 4]
my_list[False] # 1

"False"[True] # a

А, и да

Факт 4

Complex не является составным типом. Это просто объект, который принимает до двух параметров при инициализации.

Такие дела!
8.2K viewsedited  12:11
Открыть/Комментировать
2022-03-15 13:12:08 На связи Маша, автор этого канала.

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

4 марта я уехала из России. Я наконец проголосовала, тем способом, который остался мне доступен. Я смогла это сделать, потому что владею навыками, которые ценят в любом уголке мира. И мне необязательно жить в стране, которой, к сожалению, последние недели начинает становиться наша Россия.

Сейчас я за границей, без долгосрочного жилья, с небольшим запасом наличных и заблокированной банковской картой. Но я справлюсь. Больше боли мне причиняют горе, стыд и бессильная злость, о которых в России нельзя говорить публично.

Я открываю курс для всех желающих, чтобы дать людям здесь возможность обучиться тому, что знаю сама. Хочу помочь другим снова обрести свободу говорить, безопасность, тайну личной переписки и благосостояние. Я мало что могу в моём положении, но это я могу. Курс минимум до лета доступен бесплатно:

https://stepik.org/z/85388

Если хотите сделать что-то для меня, то расскажите о курсе друзьям, которым он может быть интересен. Пусть учатся.

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

Крепко обнимаю нас всех.
19.3K viewsedited  10:12
Открыть/Комментировать
2021-10-04 20:15:26 ​​Уже больше часа лежит весь Фейсбук. Вместе с продуктами компании (WhatsApp, Instagram, мессенджером), отвалились даже DNS и страница статусов https://status.fb.com. И может не работать всё то, что опиралось на fb.

Интересно, что случилось.
15.5K viewsedited  17:15
Открыть/Комментировать