Что такое
Это декоратор из модуля functools, который используется для создания декораторов.
Он обновляет значения
Подробнее можно почитать в документации.
#объяснение
@wraps
?Это декоратор из модуля functools, который используется для создания декораторов.
Он обновляет значения
__module__
, __name__
, __doc__
на значение реальной функции, а не декоратора, а также добавляет __wrapped__
для получения доступа к декорируемой функции.Подробнее можно почитать в документации.
#объяснение
👍12👏8🤯6🤔2
Про copy
В python есть модуль, который называется copy. У него только две функции:
#модули
В python есть модуль, который называется copy. У него только две функции:
copy()
и deepcopy()
.copy(x)
— поверхностно копирует объект и вставляет в него ссылки на объекты, обнаруженные в оригинале.deepcopy(x)
— Создаёт новый объект и рекурсивно вставляет в него копии объектов, которые нашёл в оригинале.#модули
🤔23👍14🤯6❤3😱3🔥2
__getattribute__
и __getattr__
Это особые методы, которые вызываются при попытке получить какой-либо атрибут класса. Например, foo.var вызовет __getattribute__
, а после, возможно __getattr__
.Отличие между методами только в том, что
__getattribute__
используется всегда, а __getattr__
только если атрибут не найден.#объяснение
👍26🔥5🤔3❤1
Статические переменные
Это переменная, которая создаётся вместе с типом и существует до закрытия приложения.
Все переменные, что находится внутри класса, но не попадают в ни один метод являются статическими.
#объяснение
Это переменная, которая создаётся вместе с типом и существует до закрытия приложения.
Все переменные, что находится внутри класса, но не попадают в ни один метод являются статическими.
#объяснение
👍14🔥3
Оператор моржа
Это фишка Python c версии 3.9. Она позволяет задавать значение переменной и одновременно его возвращать для последующей обработки.
Его довольно удобно использовать в генераторных выражениях, ведь это делает код не только чище, но и быстрее.
#объяснение
Это фишка Python c версии 3.9. Она позволяет задавать значение переменной и одновременно его возвращать для последующей обработки.
Его довольно удобно использовать в генераторных выражениях, ведь это делает код не только чище, но и быстрее.
#объяснение
👍42🤯23🔥4🥰1
Возможности срезов
С помощью срезов мы можем менять элементы списка. Называют это так: «Изменение путем присваивания».
Таким образом мы заменяем элементы внутри этого среза другими из итератора (list, tuple, range).
С их помощью мы также можем добавлять/удалять элементы, опустошать список и многое другое.
Стоит отметить, что в разреженных срезах ([::2]) такое не работает, если длина итератора не равна длине результата среза.
#объяснение
С помощью срезов мы можем менять элементы списка. Называют это так: «Изменение путем присваивания».
Таким образом мы заменяем элементы внутри этого среза другими из итератора (list, tuple, range).
С их помощью мы также можем добавлять/удалять элементы, опустошать список и многое другое.
Стоит отметить, что в разреженных срезах ([::2]) такое не работает, если длина итератора не равна длине результата среза.
#объяснение
👍51🤯12❤🔥1👾1
Сравнение последовательностей
При использовании оператор больше (>) или меньше (<) с строками, котрежами, списками, они сравниваются последовательно, то есть элемент с элементом.
Есть только небольшой нюанс при проверке строк. Они сравниваются по их позиции в таблице Unicode, которую можно получить с помощью
#объяснение
При использовании оператор больше (>) или меньше (<) с строками, котрежами, списками, они сравниваются последовательно, то есть элемент с элементом.
Есть только небольшой нюанс при проверке строк. Они сравниваются по их позиции в таблице Unicode, которую можно получить с помощью
ord(char)
.#объяснение
👍28❤7
Нижние подчёркивание между цифрами
Они никак не влияют на приложение и используются для того, чтобы числа было удобнее считывать при больших значениях.
Таким образом можно разделять десятки, сотни, тысячи и так далее.
#объяснение
Они никак не влияют на приложение и используются для того, чтобы числа было удобнее считывать при больших значениях.
Таким образом можно разделять десятки, сотни, тысячи и так далее.
#объяснение
👍60🤯16❤5🤔3
Про упаковку и распаковку
Распаковку задаёт переменным значения итерируемого объекта (список, кортеж, строка, генератор).
Упаковка позволяет собрать несколько значений в один список и после работать с ними.
Эти фишки делают код более красивым и элегантным, но стоит знать меру.
#объяснение
Распаковку задаёт переменным значения итерируемого объекта (список, кортеж, строка, генератор).
Упаковка позволяет собрать несколько значений в один список и после работать с ними.
Эти фишки делают код более красивым и элегантным, но стоит знать меру.
#объяснение
👍52❤6🤩2
Что такое
Каждый раз, когда мы импортируем код, он весь выполняется точно так же, словно мы его просто запустили. Чтобы избежать странного поведения, как на картинке, стоит использовать
Переменная получает значение '
#теория
__name__
?Каждый раз, когда мы импортируем код, он весь выполняется точно так же, словно мы его просто запустили. Чтобы избежать странного поведения, как на картинке, стоит использовать
__name__
.Переменная получает значение '
__main__
', если программу запустили напрямую (python file.py
). Если же файл импортировали как модуль, он получает своё название.#теория
👍10🍌1
⚡️ Фабричный метод
Фабричный метод используется как средство предоставления фабричных интерфейсов для создания объектов.
Они позволяют ослабить связи в коде и упростить его: чаще всего он используется, если вам нужно создать объект по какому-то условию.
Таким образом, мы перемещаем большое количество if/elif/else-кода в отдельный метод.
#паттерны
Фабричный метод используется как средство предоставления фабричных интерфейсов для создания объектов.
Они позволяют ослабить связи в коде и упростить его: чаще всего он используется, если вам нужно создать объект по какому-то условию.
Таким образом, мы перемещаем большое количество if/elif/else-кода в отдельный метод.
#паттерны
👍11
args и kwargs
Бывает ситуации, когда мы не знаем, сколько пользователей передаст параметров функции. В таком случае используют
Эти имена не имеют никакого значения, самое главное — символы звёздочки в начале.
#объяснение
Бывает ситуации, когда мы не знаем, сколько пользователей передаст параметров функции. В таком случае используют
*args
и **kwargs
.*args
— кортеж со всем позиционными аргументами. Позиционные это те, что передаются по позиции (спасибо, капитан очевидность).**kwargs
— словарь с ключевыми аргументами. Ключевые, как вы поняли, передаются по ключу, то есть key=value
.Эти имена не имеют никакого значения, самое главное — символы звёздочки в начале.
#объяснение
👍36🔥2👎1
try/except
Эта конструкция используется для «ловли» ошибок и их обработки. Например, если пользователь неправильно ввёл число, попросить его сделать это заново.
#объяснение
Эта конструкция используется для «ловли» ошибок и их обработки. Например, если пользователь неправильно ввёл число, попросить его сделать это заново.
try
— здесь хранится код, который может выдать ошибку.except Exception
— если появилась ошибка, будет выполняться код из этого блока.else
— ошибок не было? Отлично, значит после try выполняем этот блок.finally
— выполняется всегда. Выдало ошибку, не выдало ошибку, функция использовала return — не имеет значение.#объяснение
👍57🔥1
Декораторы
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
#теория
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
__call__
), который возвращает другой вызываемый объект.@wraps
используется для изменения некоторых значения (__name__
, __doc__
) на значения функции, с которой мы работаем, а не декоратора.#теория
👍19🤔6
all и any
#объяснение
all(iterable)
— возвращает True, если все элементы в iterable являются True. Документацияany(iterable)
— возвращает True, если хотя бы один элемент в iterable является True. Документация #объяснение
👍35
⚡️ Принцип KISS
«Keep it simple, stupid» означает, что программисту нужно максимально упрощать код, делать его более понятным. Таким образом в разы легче добавить новые фичи в проект, а вы сможете со спокойной душой уйти в отпуск.
Как это — проще? Вам не стоит реализовывать функционал, которые, более вероятно, не будут использовать. Также надо уметь остановиться, добавляя новые уровни абстракции или создавая интерфейсы.
#миниурок #kiss
«Keep it simple, stupid» означает, что программисту нужно максимально упрощать код, делать его более понятным. Таким образом в разы легче добавить новые фичи в проект, а вы сможете со спокойной душой уйти в отпуск.
Как это — проще? Вам не стоит реализовывать функционал, которые, более вероятно, не будут использовать. Также надо уметь остановиться, добавляя новые уровни абстракции или создавая интерфейсы.
#миниурок #kiss
👍28
Так что же такое NaN
Not a number (не число) — состояние числа с плавающей запятой, при котором машине не удалось посчитать какое-то выражение.
Компьютер не в силах поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.
Его особенностью среди других чисел является то, что оно не равно самому себе.
#объяснение
Not a number (не число) — состояние числа с плавающей запятой, при котором машине не удалось посчитать какое-то выражение.
Компьютер не в силах поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.
Его особенностью среди других чисел является то, что оно не равно самому себе.
#объяснение
👍31🔥6
Кстати, про functools
Это модуль с полезными функциями... для работы с функциями. Например:
Но и это ещё не всё, в модуле много фишек, которые можно узнать из документации.
#теория
Это модуль с полезными функциями... для работы с функциями. Например:
@cache
— простой легкий неограниченный кеш функций. Если функция долго вычисляется, то вы можете сохранить сохранить результат в памяти, чтобы потом его не считать, а брать оттуда.partial(func, *args, **keywords)
— возвращает вызываемый объект, который вызывает полученную функция с переданными при создании аргументами и во время вызова.Но и это ещё не всё, в модуле много фишек, которые можно узнать из документации.
#теория
👍22❤1
Строки на несколько строк
Бывают ситуации, когда строку лучше разделить, чтобы она легче читалась, но при этом сохранить её содержимое в полном порядке. В таком случае у нас есть три варианта:
· Использовать косую черту (/). Тогда мы переносим выражение на новую строку и ни о чем не заботимся.
· Использовать скобки. Смотрите лучше пример. Никаких + использовать не надо, строки сами объединяться.
· Использовать тройные кавычки. Внутри тройных кавычек все останется именно таким, как оно есть.
#теория
Бывают ситуации, когда строку лучше разделить, чтобы она легче читалась, но при этом сохранить её содержимое в полном порядке. В таком случае у нас есть три варианта:
· Использовать косую черту (/). Тогда мы переносим выражение на новую строку и ни о чем не заботимся.
· Использовать скобки. Смотрите лучше пример. Никаких + использовать не надо, строки сами объединяться.
· Использовать тройные кавычки. Внутри тройных кавычек все останется именно таким, как оно есть.
#теория
👍24👎1
for...else
Если вы думали, что else есть только у if, то вынужден вас огорчить. Оно встречается и у try, и у for.
Блок else выполняется если цикл завершился нормально, то есть не был остановлен с помощью оператора break.
Хочу заметить, что continue никак не влияют на блок else, только оператор break имеет значение.
Документация
#теория
Если вы думали, что else есть только у if, то вынужден вас огорчить. Оно встречается и у try, и у for.
Блок else выполняется если цикл завершился нормально, то есть не был остановлен с помощью оператора break.
Хочу заметить, что continue никак не влияют на блок else, только оператор break имеет значение.
Документация
#теория
👍16🍓1