__init__
и __new__
__new__(cls)
создаёт экземпляр класса. Это статический метод, который вызывается когда мы пишем MyClass()
. В то время как
__init__(self)
инициализирует класс. То есть задаёт значения переменным, что-то считает.__init__
всегда вызывается после __new__
, если функция вернула экземпляр cls, то есть класса. #теория
👍26🤯7👎1
Импортируем пакеты
Что может быть проще? Но у Python есть несколько фишек, которые упростят работу с пакетами.
1.
2.
3.
Последнее удобно использовать для совместимости или если у вас несколько модулей, которые работают одинаково.
#теория
Что может быть проще? Но у Python есть несколько фишек, которые упростят работу с пакетами.
1.
import <package>
— просто импорт.2.
from <package> import <obj>
— «вытаскивает» obj (функция, класс, переменная) из пакета. Можно импортировать всё, если написать на место <obj> звёздочку.3.
import <package> as <name>
— импортирует модуль и задаёт имя, записанное после as. Работает и с from <package> import <obj> as <name>
. Последнее удобно использовать для совместимости или если у вас несколько модулей, которые работают одинаково.
#теория
👍12👎2
Только ключевые и только позиционные аргументы
Начнём с терминов. Позиционные аргументы — те, что передаются по позиции (спасибо, капитан очевидность). Ключевые — те, что передаются за счёт
Все аргументы до косой черты (/) считаются позиционными, то есть передать в них данные можно только в определённом порядке.
Все аргументы после звёздочки (*) считаются ключевыми, то есть передать данные можно только с помощью
#теория
Начнём с терминов. Позиционные аргументы — те, что передаются по позиции (спасибо, капитан очевидность). Ключевые — те, что передаются за счёт
key=value
.Все аргументы до косой черты (/) считаются позиционными, то есть передать в них данные можно только в определённом порядке.
Все аргументы после звёздочки (*) считаются ключевыми, то есть передать данные можно только с помощью
key=value
.#теория
👍32❤2😱2
Три помощника в работе с циклами
#теория
enumerate(iter, start=0)
— проходится по итератору и возвращает (индекс, значение). Если задать start, то индекс сместиться на start единиц.zip(a, b, c...)
— параллельно проходит по всем последовательностям, возвращая по элементу с каждого. reversed(obj)
— переворачивает obj. Если это невозможно, выдаёт ошибку.#теория
👍13🥰5
Геттеры и сеттеры
Такое есть в C# и Java. Это штуки, которые позволяют задавать и получать значение переменной (чаще всего приватной) с помощью функции.
Только вместо get и set, в Python, мы пишем
Кстати, ещё важно чтобы имена геттера и сеттера совпадали, иначе ничего не заработает. Документация
#теория
Такое есть в C# и Java. Это штуки, которые позволяют задавать и получать значение переменной (чаще всего приватной) с помощью функции.
Только вместо get и set, в Python, мы пишем
@property
и @свойство.setter
. Свойство это и есть тот самый метод, помеченный @property
.Кстати, ещё важно чтобы имена геттера и сеттера совпадали, иначе ничего не заработает. Документация
#теория
👍14👎1
Что такое
В ней можно найти .pyc и .pyo файлы. Это байткод и оптимизированный байткод. Они создаются заново, если код программы изменился.
Если очень интересно, зачем нужно переводить код в байткод, то можете почитать PEP 3147.
#теория
__pycache__
Вас не бесит эта папка? Возможно, вы её и не встречали, но знайте, что она хранит байткод приложения. Таким образом быстрее проходит импорт и запуск.В ней можно найти .pyc и .pyo файлы. Это байткод и оптимизированный байткод. Они создаются заново, если код программы изменился.
Если очень интересно, зачем нужно переводить код в байткод, то можете почитать PEP 3147.
#теория
❤6👍1
Что ещё за Ellipsis?
Ellipsis, в переводе с английского — многоточие. Теперь, думаю, нет вопросов, почему "..." и Ellipsis это одно и то же.
Используется переменная для расширения возможностей срезов, за счёт изменения метода
Зачем? Она используется в numpy. Может быть индикатором того, что тут код надо ещё написать. Или использоваться в аннотации типов.
#теория
Ellipsis, в переводе с английского — многоточие. Теперь, думаю, нет вопросов, почему "..." и Ellipsis это одно и то же.
Используется переменная для расширения возможностей срезов, за счёт изменения метода
__getitem__
.Зачем? Она используется в numpy. Может быть индикатором того, что тут код надо ещё написать. Или использоваться в аннотации типов.
#теория
👍13🔥2👎1
⚡️ Замыкание
Это возможность вложенной функции получить доступ к данным во внешней даже после того, как та выполнилась.
На его основе строится около половины алгоритмов в функциональном программировании. А ещё замыкание позволяет инкапсулировать код.
С этой штукой надо быть осторожным и без надобности не использовать, поскольку она довольно требовательная к ресурсам пк.
#теория
Это возможность вложенной функции получить доступ к данным во внешней даже после того, как та выполнилась.
На его основе строится около половины алгоритмов в функциональном программировании. А ещё замыкание позволяет инкапсулировать код.
С этой штукой надо быть осторожным и без надобности не использовать, поскольку она довольно требовательная к ресурсам пк.
#теория
👍22🤔4
@staticmethod
и @classmethod
@staticmethod
обозначает метод статическим. @classmethod
привязывает метод к классу. Теперь перейдём к примеру.__new__ это статический метод и он используется для создания экземпляра класса.
dict.fromkey()
это ещё один способ создания словаря и это уже classmethod
.#объяснение
👍14👎13
Ищем жуков (bugs)
Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.
Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).
Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так:
#теория
Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.
Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).
Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так:
python3 -O foo.py
.#теория
👍21🤯4
Экранирование
Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (про multi-line строки пока не говорим ).
Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
#теория
Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (
Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
#теория
👍22👎3
Хочу подбирать контент для вас и определить, что вам интереснее. Вам нужные темы для...
Anonymous Poll
31%
Для начинающих (что такое генератор, интератор, списковые включения)
21%
Для продвинутых (Сборщик мусора, GIL, паттерны, принципы программирования)
44%
Смешанное (первая неделя для новичков, вторая для продвинутых)
4%
Посмотреть результаты
👍22👏6🤔2
Что это за вакханалия?
Начнём с того, что в Python код функции это отдельный объект, который находится в
#объяснение
Начнём с того, что в Python код функции это отдельный объект, который находится в
__code__
. Напишите import types; help(types.CodeType)
.__doc__
указывает на документацию, то есть на строку после определения функции. Кстати, все атрибуты функции можно найти тут в разделе User-defined functions.#объяснение
👍21❤1🤔1
Лямбда-функция
Слово lambda позволяет запихнуть простую функцию в одну строку. Часто используется вместе с
Но будьте осторожны, некоторые питонисты не любят функциональщину... Я в том числе.
#теория
Слово lambda позволяет запихнуть простую функцию в одну строку. Часто используется вместе с
map()
, filter()
.Но будьте осторожны, некоторые питонисты не любят функциональщину... Я в том числе.
#теория
👍17🔥5🙏1
Теперь разберём генератор
Это всё те же итераторы, которые используются для генерации/создания чего либо, поэтому пройтись по ним можно только 1 раз. Есть функции-генераторы, есть генераторы списков (о них чуть позже).
Они часто используются при больших вычислениях, ведь не потребляют много памяти. А ещё у генераторов есть свои методы.
#теория
Это всё те же итераторы, которые используются для генерации/создания чего либо, поэтому пройтись по ним можно только 1 раз. Есть функции-генераторы, есть генераторы списков (о них чуть позже).
Они часто используются при больших вычислениях, ведь не потребляют много памяти. А ещё у генераторов есть свои методы.
#теория
👍17
Модуль dis
Лучший способ узнать Python — залезть к нему под капот. Это и делает dis. Вернее, он даёт нам доступ к байт-коду.
Таким образом можно понять, каким образом Python оптимизирует код. Особенно интересно проверять с строками.
#модули
Лучший способ узнать Python — залезть к нему под капот. Это и делает dis. Вернее, он даёт нам доступ к байт-коду.
Таким образом можно понять, каким образом Python оптимизирует код. Особенно интересно проверять с строками.
#модули
👍10
Рассказываю про dict
Это переменная, которая есть почти у всех классов. Она хранит в себе все атрибуты. Поскольку это словарь, мы можем её менять, создавая новые атрибуты.
Самое интересное то, что эта переменная есть даже у функций. Таким образом мы можем создавать атрибуты даже у функций.
#объяснение
Это переменная, которая есть почти у всех классов. Она хранит в себе все атрибуты. Поскольку это словарь, мы можем её менять, создавая новые атрибуты.
Самое интересное то, что эта переменная есть даже у функций. Таким образом мы можем создавать атрибуты даже у функций.
#объяснение
🔥19👍3❤1