Just Python
Canal cerrado
🐍Простое изучение Python. Ссылка: @Portal_v_IT Сотрудничество: @oleginc
Mostrar más9 696
Suscriptores
-624 horas
-217 días
-7630 días
Archivo de publicaciones
9 696
Что такое
__pycache__
Вас не бесит эта папка? Возможно, вы её и не встречали, но знайте, что она хранит байткод приложения. Таким образом быстрее проходит импорт и запуск.
В ней можно найти .pyc и .pyo файлы. Это байткод и оптимизированный байткод. Они создаются заново, если код программы изменился.
Если очень интересно, зачем нужно переводить код в байткод, то можете почитать PEP 3147.
#theory // Just Python9 696
Три помощника в работе с циклами
enumerate(iter, start=0) — проходится по итератору и возвращает (индекс, значение). Если задать start, то индекс сместиться на start единиц.
zip(a, b, c...) — параллельно проходит по всем последовательностям, возвращая по элементу с каждого.
reversed(obj) — переворачивает obj. Если это невозможно, выдаёт ошибку.
#theory // Just Python9 696
10 лет я слежу за мистическим
журналом The Economist
Я не ставил вакцину от COVID,
потому что знал, что это опасно
Я знал, про теракт в Крокусе за 2 недели до случившегося
А неделю назад я увидел
предупреждение о покушении на
Трампа в их новой обложке
Благо теперь журнал можно
читать на русском, делюсь с вами:
@TheEconomist
9 696
Только ключевые и только позиционные аргументы
Начнём с терминов. Позиционные аргументы — те, что передаются по позиции (спасибо, капитан очевидность). Ключевые — те, что передаются за счёт
key=value.
Все аргументы до косой черты (/) считаются позиционными, то есть передать в них данные можно только в определённом порядке.
Все аргументы после звёздочки (*) считаются ключевыми, то есть передать данные можно только с помощью key=value.
#theory // Just Python9 696
__init__ и __new__
__new__(cls) создаёт экземпляр класса. Это статический метод, который вызывается когда мы пишем MyClass().
В то время как __init__(self) инициализирует класс. То есть задаёт значения переменным, что-то считает.
__init__ всегда вызывается после __new__, если функция вернула экземпляр cls, то есть класса.
#theory // Just Python9 696
Импортируем пакеты
Что может быть проще? Но у Python есть несколько фишек, которые упростят работу с пакетами.
1.
import <package> — просто импорт.
2. from <package> import <obj> — «вытаскивает» obj (функция, класс, переменная) из пакета. Можно импортировать всё, если написать на место <obj> звёздочку.
3. import <package> as <name> — импортирует модуль и задаёт имя, записанное после as. Работает и с from <package> import <obj> as <name>.
Последнее удобно использовать для совместимости или если у вас несколько модулей, которые работают одинаково.
#theory // Just Python9 696
global vs nonlocal
global — перечисленные идентификаторы стоит воспринимать как глобальные. А глобальные это те, которые доступны из любого места в модуле.
nonlocal — оператор, уведомляющий среду, что стоит работать не с локальной переменной, а уровнем выше. Часто используется с вложенными функциями.
#theory // Just Python
9 696
Что такое
__all__ ?
Вот вы написали from module import * и к вам в код попало кучу классов, которые используются только внутри модуля, снаружи они бесполезны.
Избавиться от мусора можно, если записать в __all__ список имён всех объектов (классов, функций, переменных), которые надо импортировать. Документация.
Кстати, объекты, которые начинаются на нижнее подчёркивание тоже не импортируются.
#theory // Just Python9 696
The Economist предупреждал Трампа о возможном покушении
Более того, журнал расписал решающие события на ближайший год, которые полностью изменят облик и России, и всего мира.
Пророчества журнала славятся своей точностью: новость о смерти президента Ирана вышла на 7 часов раньше, чем это случилось, а о ковиде журнал писал ещё за пол года до начала.
Читайте The Economist на русском: @TheEconomist
9 696
О том как работает словарь.
Начнём с того, что нам нужны хешируемые объекты, это те, у которых реализована функция
__hash__. Чаще всего это неизменяемые типы (tuple, str) или пользовательские классы.
После нам нужна хеш-таблица. Примерная её реализация есть на фото выше. Разобраться, как она работает, можно самостоятельно, но лучше прочитать классную статью, из которой я и украл код :)
#theory // Just Python9 696
Шутки в Python
Удивительно, но в документации python есть раздел — humor. Это набор шуток, связанных с нашим любимым языком. Вот одна из них:
Маленькая девочка пришла на шоу домашних животных и просит ваббита (wabbit). Продавец смотрит на нее, улыбается и говорит:
- Хочешь милого пушистого белого кролика или миленького коричневого кролика?
- На самом деле, - говорит маленькая девочка, - я не думаю, что мой питон что-то заметит.
#theory // Just Python
9 696
Класс с данными (для хранения информации)
У всех классов есть данные, но есть те, которые используются специально для хранения информации о пользователе, позиции и т.д. Создавать их проще всего с
@dataclass из dataclasses.
Декоратор самостоятельно создаёт __init__, __eq__, __str__ и множество других важных методов на основе статических переменных. Документация.
#theory // Just Python9 696
Всего за 5 минут определите подходящую вам IT-профессию.
Онлайн-школа Skillfactory разработала уникальный профориентационный тест из 18 вопросов. Ответив на них, узнаете наиболее подходящую вам специальность.
Работайте в российских или зарубежных компаниях, в офисе или удаленно. Для айтишников — сниженная ставка по ипотеке, высокая зарплата, комфортные условия и гибкий график.
Переходите по специальной ссылке, чтобы пройти тест, получить карьерную консультацию и мини-курс для выбора профессии в IT или дизайне
Реклама. Информация о рекламодателе по ссылкам в посте.
9 696
yield оператор
Он позволяет создавать функции-генераторы. Они могут просчитать и вернуть несколько значений но не за раз.
Записывается он вместо return, принимая число, которое должна вернуть функция. Но если вы вызовете функцию то получите генератор, а не результат работы.
По генератору можно пройтись так же, как и по списку, используя for. Или с помощью функции
next().
Почему нельзя вернуть значения в виде списка? Список будет занимать очень много места, если в нём будет более 1000000 элементов, а генератор — нет.
#theory // Just Python9 696
Элементы, которые отсутствуют в словаре
Если в словаре нет определённого ключа, то он вызывает
__missing__. Суть в том, что мы можем переопределить этот метод.
Кстати, примерно таким же образом, как и на фото выше, реализован defaultdict из модуля collections.
#theory // Just Python9 696
Методы генераторов
Всего их три:
close, throw, send. Первые два нам не интересны, поскольку они просто прерывают работу генератора и/или выводят ошибку (если это throw).
send() же позволяет передавать значения генератору. В первый раз всегда должно передаваться None, что бы запустить функцию.
К слову, с помощью send() создают корутины — функции, которым можно передавать значения, останавливать и возобновлять работу программы.
#theory // Just Python9 696
Переменная «_»
Если вы увидели такое название то знайте, что эта переменная просто необходима (без неё ничего не заработает), но нигде не используется.
Часто встречается в циклах и при распаковке. Кстати, два, три, четыре нижних подчёркивания несут ту же функцию, просто _ уже занято.
К тому же её использует интерпретатор Python, чтобы сохранять туда результат работы последней команды.
#theory // Just Python
9 696
Другого шанса не будет, НОТКОЙН вернулся, судный день настал!
Заходим 👉 https://t.me/notcoin_bot?start=er_19915104
Вы сразу получаете в подарок семи дневный платинум аккаунт, благодаря которому сможете пассивно зарабатывать - это просто ГЕМ 2024 года!
9 696
Подробнее разбираем type hints
Да, аннотацию типов ещё называют type hints. В модуле typing можно найти кучу полезных полезных объектов для работы с подсказками.
Самые часто используемые: коллекции (List, Dict, Tuple), Any, Union, Optional. Когда мы их используем, мы в квадратных скобках передаём тип, с которым работает объект.
#theory // Just Python
9 696
Делаем типы статичными
Намучались с динамической типизацией? Что ж, у этого есть решение — аннотация типов.
Она никак не влияет на программу, а только говорит программисту и IDE какой тип должен быть на месте этой переменной.
При грамотном использовании вы сможете избежать множество проблем, ведь IDE вам подскажет, что здесь должен быть MySuperObject, а не None.
#theory // Just Python
