CoolPython
4.68K subscribers
20 photos
44 links
Канал об основах Python и хороших практиках разработки. Создаём системность в обрывочных знаниях.

Тем, кто хочет понимать, что пишет!
Download Telegram
Одна особенность filter

Синтаксис встроенной функции filter такой:

filter(function, iterable).

Эта функция фильтрует значения переданной последовательности с помощью функции function. Если function получает очередной элемент последовательности и возвращает True, то элемент попадает в результат работы filter, иначе нет.

Например, таким способом можно отфильтровать только строки, состоящие из чисел:
 
>>> strings = ['two', 'list', '', 'dict', '100', '1', '50']
>>> list(filter(str.isdigit, strings))
['100', '1', '50']

Или только четные значения:
 
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(filter(lambda x: x % 2 == 0, numbers))

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

А еще (внезапно) вместо функции можно использовать None:
 
>>> random = [1, 'a', 0, False, True, '0', '']
>>> list(filter(None, random))
[1, 'a', True, '0']

И тогда filter вернет только truthy значения. 🐠
Что здесь хорошего

Расскажу тем, что здесь недавно (и напомню тем, кто давно), что за движ в этом канале.

Сначала обо мне. Канал авторский, автора зовут Маша Чакчурина (это я). До IT я занималась астрофизикой, а в программировании начинала как C++ разработчица в компании StarLine в СПб. Там я перешла на Python, писала API, микросервисы, поучаствовала в их беспилотнике. После этого работала в Kaspersky, была техничсеким кофаундером в стартапе, делала голосового помощника в Сбере. Всего я в бэкенде шесть лет, последние два преподаю.

Итак, что здесь хорошего.

👶 Тут есть посты об основах языка и стиле кода для junior коллег. Например, что такое мутабельность и иммутабельность, какая сложность добавления операции в список, чем is отличается от ==, как инициализировать контейнеры в функциях и многие другие.

👩‍🔧 Поменьше постов о низкоуровневых особенностях языка для middle и senior, например, развернуто о том, как работает TimSort.

😽 Есть о софт-скиллах в IT, например, о том, как онбордиться на новый проект, или о вопросах коллегам. Еще у нас с основательницей школы IT Girl School Алисой был эфир с разбором резюме подписчиков.

Бывают новости Python: о свежих либах, обновлениях или о новых крутых курсах от гуру вроде Дэна Бейдера.

🧐 Иногда пишу об истории языка (как здесь и здесь).

🎪 Есть шютки, например, послушайте песню про PEP8.

🧭 Есть старая подборка бесплатных материалов по computer science (давно хочу обновить).

Еще я веду курс по Python для тех, кто еще никогда не писал программы. Курс составила сама, с моей фирменной подачей «просто о сложном». Время от времени я набираю группы на этот курс и много сил трачу на поддержку учеников. Для меня это важный личный проект🤍

Если вы знаете кого-то, кто интересуется Python, перешлите ему или ей, пожалуйста, этот текст. Помогите мне встретить тех, кому интересно то, что я делаю

И оставайтесь в CoolPython 🐠
Live stream started
Прямо сейчас в голосовом чате с крутыми специалистами по DS и бэку обсуждаем:

🐠 Python фреймворки,
🐠 Асинхронность,
🐠 GPT-3,
🐠 достижения машинного зрения,
🐠 студию Артемия Лебедева 😅,
🐠 версии Python,
🐠 плохой и хороший код.

Присоединяйтесь. Записи не будет)

Кто был, поделитесь, пожалуйста, как вам? Делать еще такие эфиры?
Магические методы

Магические методы Python -- важный элемент синтаксиса языка. В них нет ничего волшебного или тайного, а наоборот, мы постоянно их вызываем, перегружаем и используем в коде.

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

Наслаждайтесь!
Про культуру коммитов

Работаю над куском кода, который опирается на json файл. Файл этот длиной 7к+ строк (только не спрашивайте, как так вышло). И кусок этот одновременно
- сложный
- используется большим количеством пользователей.

И тут из мастера в этот json прилетают изменения. В которых во всем файле пробелы заменены на табы. То есть, дифф слишком большой и отсмотреть глазами не получается. Поправлю, конечно, но досадно -- и небезопасно.

В связи с чем напоминаю, как коммитить (вот, например, хорошая статья от другого автора)

Для меня главное в этом тексте:
Один коммит = одна атомарная задача

И от себя бы еще добавила:
Дифф удобно смотреть ривьюеру

Чтобы этого добиться, перед каждым коммитом нужно отсматривать изменения в каждом файле, которые хотите залить в репо: с помощью git diff или в IDE.

И еще я никогда не делаю

git add .

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

Поделитесь, какие хорошие практики работы с git вы усвоили за время работы?
​​Уже больше часа лежит весь Фейсбук. Вместе с продуктами компании (WhatsApp, Instagram, мессенджером), отвалились даже DNS и страница статусов https://status.fb.com. И может не работать всё то, что опиралось на fb.

Интересно, что случилось.
Вопрос по Python. Как думаете, является ли тип complex составным?
Anonymous Quiz
19%
Это простой тип
36%
Это составной тип
45%
Что такое complex?
Пара фактов о численных типах
(которые вы, возможно, не знали)

Факт 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 не является составным типом. Это просто объект, который принимает до двух параметров при инициализации.

Такие дела!🤗
/ и * в определнии функции

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

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

🐠
Делюсь с вами коллективным учебником по машинному обучению из Яндекса. На самом деле наполовину делюсь, наполовину сохраняю себе, чтобы прочитать позже. Теплый привет Вите Кантору
У нас опять есть группа, можно покомментить и покидаться какашками

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

UPD2 https://t.me/+CgNMmJwzjYI1MmYy