Just Python
کانال بسته
🐍Простое изучение Python. Ссылка: @Portal_v_IT Сотрудничество: @oleginc
نمایش بیشتر9 696
مشترکین
-624 ساعت
-217 روز
-7630 روز
آرشیو پست ها
9 696
👩💻 Программирование теперь в телеграм!
Вот обширная база материалов, которая ежедневно обновляется, выбирай своё направление:
Обучение Python с нуля
Обучение JavaScript с нуля
Обучение Java с нуля
Обучение HTML/CSS с нуля
Обучение SQL/GO/PHP с нуля
Обучение C/С++ с нуля
Обучение С# с нуля
Обучение Kotlin/Swift с нуля
⛓ Архив на 1789ГБ: Курсы, книги, шпаргалки, статьи, видео ресурсы — всё собрано в одном месте: @roadmap_ready
9 696
Форматы строк
У меня у одного течёт кровь из глаз когда я вижу как в строку добавляют данные используя +, хотя уже давно существуют f-строки?
f-строки позволяют быстро вставить какую-то информацию в строку и отформатировать её как-то (округлить до сотых, перевести в биты, заполнить нулями).
Расписать тут всё, что можно творить с данными нереально, поскольку возможностей очень много. Если интересно, можете почитать в документации.
#theory // Just Python
9 696
Префиксы строк
r'raw str' — строка останется в точно таком же виде, как и была введена. Они обрабатывают обратную косую строку как обычный символ.
b'bytes literal' — переводит строку в набор байтов. Там могут быть только символы из ASCII (англ. алфавит, цифры, \n, \t, \r, !*[]<=> и остальные символы).
f'formated {string}' — форматирует строку на основе правил, описанных тут.
u'unicode' — используются для решения проблем с двумя кодовыми базами в Python3 и Python2.
Документация
#theory // Just Python9 696
Алгоритм DFS
Depth-first search используется для рекурсивного обхода графа. Чаще всего он используется для поиска элементов, для поиска мостов графов или для преобразования дерева в строку.
Как он работает? Мы берём любую вершину и проходимся по её соседям до того, пока у нашей вершины не останется связей. У каждого соседа мы вызываем эту же функцию и проделываем ту же операцию.
Главное не забыть записать вершину в посещённые, чтобы избежать циклического прохода по одним и тем же элементам графа.
Но вот рекурсия вызывает много проблем. Из-за переполнения стека мы не можем работать с большими графами.
#theory // Just Python
9 696
__str__ vs __repr__
Эти методы используются для перевода класса в строку, но в чём между нимstr
__str__ — используется функциями print() и format() для красивого вывода информации оrepr__repr__ — Часто используется при отладке, поэтому возвращает информативное представление об объекте.
str __str__ не определён, то иrepr__repr__.
P.S. Это не обязательно, но часто встречается, что с помощьrepr__repr__ можно получить новый объект с теми же данными, если запихнуть её в eval(str). Так, например, сделано в datetime.
#theory // Just Python9 696
Зачем нужен оператор with
Был придуман, чтобы заменить огромные try/except/finally при работе с файлами/соединениями на более простую конструкцию.
Он самостоятельно выполняет обязательные функции по завершению работы с классом после выполнения всех действий. Об этом в PEP 343.
Оператор использует
__enter__ в самом начале, например, для открытия файла. После выполнения всех операций (или если возникла ошибка), используется __exit__.
#theory // Just Python9 696
Цепочка операторов
Синтаксический сахар для упрощения проверок. Работает со всеми операторами сравнения (<, ==, >, ...), is и in. Цепь может состоять из любого количества операторов.
Хочу заметить, что цепь не создаёт никаких связей, так что вы вполне можете написать так:
x < y > z. Если увидите это на проде, пишите git blame и ищите, кому бить морду.
#theory // Just Python9 696
Как определить истинный этот объект или нет?
Многие знают, что в Python всё можно перевести в bool. Пустые последовательности и коллекции ('', [], (), {}, range(0)), None и 0 возвращают False. Остальное — True.
Но как это просчитывается? Вызывается
__bool__() метод, который возвращает True/False. Если его нет, используется __len__(). Если метод вернёт 0, то результат будет False.
Если ни одна из функций не определена, то объекты считаются True.
#theory // Just Python9 696
Всего за 5 минут определите подходящую вам IT-профессию.
Онлайн-школа Skillfactory разработала уникальный профориентационный тест из 18 вопросов. Ответив на них, узнаете наиболее подходящую вам специальность.
Работайте в российских или зарубежных компаниях, в офисе или удаленно. Для айтишников — сниженная ставка по ипотеке, высокая зарплата, комфортные условия и гибкий график.
Переходите по специальной ссылке, чтобы пройти тест, получить карьерную консультацию и мини-курс для выбора профессии в IT или дизайне
Реклама. Информация о рекламодателе по ссылкам в посте.
9 696
for и else
Если вы думали, что else есть только у if, то вынужден вас огорчить. Оно встречается и у try, и у for.
Блок else выполняется если цикл завершился нормально, то есть не был остановлен с помощью оператора break.
Хочу заметить, что continue никак не влияют на блок else, только оператор break имеет значение.
Документация
#theory // Just Python
9 696
Кстати, про functools
Это модуль с полезными функциями... для работы с функциями. Например:
@cache — простой легкий неограниченный кеш функций. Если функция долго вычисляется, то вы можете сохранить сохранить результат в памяти, чтобы потом его не считать, а брать оттуда.
partial(func, *args, **keywords) — возвращает вызываемый объект, который вызывает полученную функция с переданными при создании аргументами и во время вызова.
Но и это ещё не всё, в модуле много фишек, которые можно узнать из документации.
#theory // Just Python9 696
Так что же такое NaN
Not a number (не число) — состояние числа с плавающей запятой, при котором машине не удалось посчитать какое-то выражение.
Компьютер не в силах поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.
Его особенностью среди других чисел является то, что оно не равно самому себе.
#theory // Just Python
9 696
Принцип KISS
«Keep it simple, stupid» означает, что программисту нужно максимально упрощать код, делать его более понятным. Таким образом в разы легче добавить новые фичи в проект, а вы сможете со спокойной душой уйти в отпуск.
Как это — проще? Вам не стоит реализовывать функционал, которые, более вероятно, не будут использовать. Также надо уметь остановиться, добавляя новые уровни абстракции или создавая интерфейсы.
#theory // Just Python
9 696
all и any
all(iterable) — возвращает True, если все элементы в iterable являются True. Документация
any(iterable) — возвращает True, если хотя бы один элемент в iterable является True. Документация
#theory // Just Python9 696
Декораторы
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
__call__), который возвращает другой вызываемый объект.
@wraps используется для изменения некоторых значения (__name__, __doc__) на значения функции, с которой мы работаем, а не декоратора.
#theory // Just Python9 696
args и kwargs
Бывает ситуации, когда мы не знаем, сколько пользователей передаст параметров функции. В таком случае используют
*args и **kwargs.
*args — кортеж со всем позиционными аргументами. Позиционные это те, что передаются по позиции (спасибо, капитан очевидность).
**kwargs — словарь с ключевыми аргументами. Ключевые, как вы поняли, передаются по ключу, то есть key=value.
Эти имена не имеют никакого значения, самое главное — символы звёздочки в начале.
#theory // Just Python9 696
Фабричный метод
Фабричный метод используется как средство предоставления фабричных интерфейсов для создания объектов.
Они позволяют ослабить связи в коде и упростить его: чаще всего он используется, если вам нужно создать объект по какому-то условию.
Таким образом, мы перемещаем большое количество if/elif/else-кода в отдельный метод.
#theory // Just Python
9 696
Станьте Дизайнером за 0₽
Зарплата начинающего дизайнера от 50 000₽, а стоимость обучения на профессию в онлайн-школах от 120 000 до 220 000 рублей.
Прямо сейчас GeekBrains отдают бесплатно 5 курсов по IT, в том числе и курс по дизайну.
Переходите по ссылке и забирайте курс по дизайну. Акция продлится до 8 июля: https://go.redav.online/802954da230f6090?erid=LdtCK7b7u&m=1
9 696
Что такое
__name__ ?
Каждый раз, когда мы импортируем код, он весь выполняется точно так же, словно мы его просто запустили. Чтобы избежать странного поведения, как на картинке, стоит использовать __name__.
Переменная получает значение '__main__', если программу запустили напрямую (python file.py). Если же файл импортировали как модуль, он получает своё название.
#theory // Just Python9 696
Про упаковку и распаковку
Распаковку задаёт переменным значения итерируемого объекта (список, кортеж, строка, генератор).
Упаковка позволяет собрать несколько значений в один список и после работать с ними.
Эти фишки делают код более красивым и элегантным, но стоит знать меру.
#theory // Just Python
