__init__ и __new__
__new__(cls) создаёт экземпляр класса. Это статический метод, который вызывается когда мы пишем MyClass(). В то время как
__init__(self) инициализирует класс. То есть задаёт значения переменным, что-то считает.__init__ всегда вызывается после __new__, если функция вернула экземпляр cls, то есть класса. #theory // Just Python
Только ключевые и только позиционные аргументы
Начнём с терминов. Позиционные аргументы — те, что передаются по позиции (спасибо, капитан очевидность). Ключевые — те, что передаются за счёт
Все аргументы до косой черты (/) считаются позиционными, то есть передать в них данные можно только в определённом порядке.
Все аргументы после звёздочки (*) считаются ключевыми, то есть передать данные можно только с помощью
#theory // Just Python
Начнём с терминов. Позиционные аргументы — те, что передаются по позиции (спасибо, капитан очевидность). Ключевые — те, что передаются за счёт
key=value.Все аргументы до косой черты (/) считаются позиционными, то есть передать в них данные можно только в определённом порядке.
Все аргументы после звёздочки (*) считаются ключевыми, то есть передать данные можно только с помощью
key=value.#theory // Just Python
Три помощника в работе с циклами
#theory // Just Python
enumerate(iter, start=0) — проходится по итератору и возвращает (индекс, значение). Если задать start, то индекс сместиться на start единиц.zip(a, b, c...) — параллельно проходит по всем последовательностям, возвращая по элементу с каждого. reversed(obj) — переворачивает obj. Если это невозможно, выдаёт ошибку.#theory // Just Python
Что такое
В ней можно найти .pyc и .pyo файлы. Это байткод и оптимизированный байткод. Они создаются заново, если код программы изменился.
Если очень интересно, зачем нужно переводить код в байткод, то можете почитать PEP 3147.
#theory // Just Python
__pycache__
Вас не бесит эта папка? Возможно, вы её и не встречали, но знайте, что она хранит байткод приложения. Таким образом быстрее проходит импорт и запуск.В ней можно найти .pyc и .pyo файлы. Это байткод и оптимизированный байткод. Они создаются заново, если код программы изменился.
Если очень интересно, зачем нужно переводить код в байткод, то можете почитать PEP 3147.
#theory // Just Python
Что ещё за Ellipsis?
Ellipsis, в переводе с английского — многоточие. Теперь, думаю, нет вопросов, почему "..." и Ellipsis это одно и то же.
Используется переменная для расширения возможностей срезов, за счёт изменения метода
Зачем? Она используется в numpy. Может быть индикатором того, что тут код надо ещё написать. Или использоваться в аннотации типов.
#theory // Just Python
Ellipsis, в переводе с английского — многоточие. Теперь, думаю, нет вопросов, почему "..." и Ellipsis это одно и то же.
Используется переменная для расширения возможностей срезов, за счёт изменения метода
__getitem__.Зачем? Она используется в numpy. Может быть индикатором того, что тут код надо ещё написать. Или использоваться в аннотации типов.
#theory // Just Python
Замыкание
Это возможность вложенной функции получить доступ к данным во внешней даже после того, как та выполнилась.
На его основе строится около половины алгоритмов в функциональном программировании. А ещё замыкание позволяет инкапсулировать код.
С этой штукой надо быть осторожным и без надобности не использовать, поскольку она довольно требовательная к ресурсам пк.
#theory // Just Python
Это возможность вложенной функции получить доступ к данным во внешней даже после того, как та выполнилась.
На его основе строится около половины алгоритмов в функциональном программировании. А ещё замыкание позволяет инкапсулировать код.
С этой штукой надо быть осторожным и без надобности не использовать, поскольку она довольно требовательная к ресурсам пк.
#theory // Just Python
Дескрипторы
Сложная тема. Это атрибуты-классы, с методами
Они позволяет менять поведения получения значения атрибута, его установки и удаления. Есть хороший HowTo на эту тему.
#theory // Just Python
Сложная тема. Это атрибуты-классы, с методами
__get__(obj, objtype), __set__(obj, value) или __delete__(obj).Они позволяет менять поведения получения значения атрибута, его установки и удаления. Есть хороший HowTo на эту тему.
#theory // Just Python
@staticmethod и @classmethod
@staticmethod обозначает метод статическим. @classmethod привязывает метод к классу. Теперь перейдём к примеру.__new__ это статический метод и он используется для создания экземпляра класса.
dict.fromkey() это ещё один способ создания словаря и это уже classmethod.#theory // Just Python
Ищем жуков (bugs)
Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.
Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).
Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так:
#theory // Just Python
Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.
Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).
Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так:
python3 -O foo.py.#theory // Just Python
Экранирование
Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (про multi-line строки пока не говорим ).
Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
#theory // Just Python
Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (
Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
#theory // Just Python
Лямбда-функция
Слово lambda позволяет запихнуть простую функцию в одну строку. Часто используется вместе с
Но будьте осторожны, некоторые питонисты не любят функциональщину... Я в том числе.
#theory // Just Python
Слово lambda позволяет запихнуть простую функцию в одну строку. Часто используется вместе с
map(), filter().Но будьте осторожны, некоторые питонисты не любят функциональщину... Я в том числе.
#theory // Just Python
Модуль dis
Лучший способ узнать Python — залезть к нему под капот. Это и делает dis. Вернее, он даёт нам доступ к байт-коду.
Таким образом можно понять, каким образом Python оптимизирует код. Особенно интересно проверять с строками.
#modules // Just Python
Лучший способ узнать Python — залезть к нему под капот. Это и делает dis. Вернее, он даёт нам доступ к байт-коду.
Таким образом можно понять, каким образом Python оптимизирует код. Особенно интересно проверять с строками.
#modules // Just Python
Теперь разберём генератор
Это всё те же итераторы, которые используются для генерации/создания чего либо, поэтому пройтись по ним можно только 1 раз. Есть функции-генераторы, есть генераторы списков (о них чуть позже).
Они часто используются при больших вычислениях, ведь не потребляют много памяти. А ещё у генераторов есть свои методы.
#theory // Just Python
Это всё те же итераторы, которые используются для генерации/создания чего либо, поэтому пройтись по ним можно только 1 раз. Есть функции-генераторы, есть генераторы списков (о них чуть позже).
Они часто используются при больших вычислениях, ведь не потребляют много памяти. А ещё у генераторов есть свои методы.
#theory // Just Python
Рассказываю про dict
Это переменная, которая есть почти у всех классов. Она хранит в себе все атрибуты. Поскольку это словарь, мы можем её менять, создавая новые атрибуты.
Самое интересное то, что эта переменная есть даже у функций. Таким образом мы можем создавать атрибуты даже у функций.
#theory // Just Python
Это переменная, которая есть почти у всех классов. Она хранит в себе все атрибуты. Поскольку это словарь, мы можем её менять, создавая новые атрибуты.
Самое интересное то, что эта переменная есть даже у функций. Таким образом мы можем создавать атрибуты даже у функций.
#theory // Just Python
Немного про регулярные выражения
Регулярные выражения невероятно удобные. Но их просто невозможно читать, а уже тем более менять. Но есть решение!
Недавно наткнулся на статью, где гений-разработчик с помощью f-строк в разы упрощает работу с регулярными выражениями.
#theory // Just Python
Регулярные выражения невероятно удобные. Но их просто невозможно читать, а уже тем более менять. Но есть решение!
Недавно наткнулся на статью, где гений-разработчик с помощью f-строк в разы упрощает работу с регулярными выражениями.
#theory // Just Python
Объясняю магию
Постараюсь интерактивно показать, | это курсор. Первым делом вывелось a|, потом, за счёт \b, стало так: |a, и в результате получили c|.
Кстати, все такие символы можно тут найти.
#theory // Just Python
\b возвращает курсор вывода на один символ назад. А поскольку после него был ещё символ (a), то он просто перезаписался.Постараюсь интерактивно показать, | это курсор. Первым делом вывелось a|, потом, за счёт \b, стало так: |a, и в результате получили c|.
Кстати, все такие символы можно тут найти.
#theory // Just Python
Генераторные списки
Эта штука может уместить for в одну строку, так ещё и работает быстрее, чем обычный цикл. Используется, как вы уже поняли, для создании нового списка.
Кстати, генерировать можно не только списки, но и множества, словари. А можно просто передавать функциям, по типу
#theory // Just Python
Эта штука может уместить for в одну строку, так ещё и работает быстрее, чем обычный цикл. Используется, как вы уже поняли, для создании нового списка.
Кстати, генерировать можно не только списки, но и множества, словари. А можно просто передавать функциям, по типу
sum().#theory // Just Python
Модуль heapq
Нас интересуют только две функции:
В большинстве случаев функции быстрее чем
#modules // Just Python
Нас интересуют только две функции:
nlargest() и nsmallest(). Они позволяют получить n самых больших/маленьких значений в iterable.В большинстве случаев функции быстрее чем
sorted(iterable)[:n]. Их использование можно заметить в Counter.most_common().#modules // Just Python
Поговорим про del
Он не удаляет объект, как вы могли подумать, а убирает связь между переменной и объектом.
Потом, если объект нигде больше не используется, сборщик мусора удалит его.
Ещё с его помощью можно убирать данные из списка, словаря.
#theory // Just Python
Он не удаляет объект, как вы могли подумать, а убирает связь между переменной и объектом.
Потом, если объект нигде больше не используется, сборщик мусора удалит его.
Ещё с его помощью можно убирать данные из списка, словаря.
#theory // Just Python
Парсим сайты
Нужно узнать заголовок последней новости? Отслеживать цену товара? Или автоматически находить решение на Stackoverflow? Вам поможет Beautiful soup.
Установка:
Функционал довольно большой и весь список можно найти в документации.
#theory // Just Python
Нужно узнать заголовок последней новости? Отслеживать цену товара? Или автоматически находить решение на Stackoverflow? Вам поможет Beautiful soup.
Установка:
pip install beautifulsoup4
Модуль может парсить HTML и XML файлы и находить на них нужную информацию. Например, найти заголовок (тег h1) или все ссылки на сайте.Функционал довольно большой и весь список можно найти в документации.
#theory // Just Python
Фокус с type
Все мы знаем, что type позволяет определять тип данных (строка это или, может, список). Но у него есть другая функция — создание типа.
Таким образом мы можем во время выполнения создать новый класс и пользоваться им.
#theory // Just Python
Все мы знаем, что type позволяет определять тип данных (строка это или, может, список). Но у него есть другая функция — создание типа.
Таким образом мы можем во время выполнения создать новый класс и пользоваться им.
#theory // Just Python