Декораторы
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
__call__), который возвращает другой вызываемый объект.@wraps используется для изменения некоторых значения (__name__, __doc__) на значения функции, с которой мы работаем, а не декоратора.Функция exit создана для удобства работы в интерактивном режиме, однако не рекомендуется использовать её внутри скриптов. По факту она также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:
>>> exitИспользовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
nameless@pycoders:~$
import sys
try:
# code
except:
sys.exit()
👍2
Разница между is и ==
Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции
is занимается сравниванием этих самых адресов. В то время как == вызывает функцию
Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции
id().is занимается сравниванием этих самых адресов. В то время как == вызывает функцию
__eq__ и предназначения для сравнения значений класса.Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
❤1👍1🤨1
💡Лайфхаки и памятки для питонистов
👉Вывести в консоль 2 или более списков одновременно.
Output:
👉Превратить строку в список.
Output:
👉Превратить список списков в один список.
Output:
👉Раздробить список в группы.
Output:
👉Вывести в консоль 2 или более списков одновременно.
>>>list1 = [1, 3, 5, 7]>>>list2 = [2, 4, 6, 8]>>>for a, b in zip(list1, list2):...print (a, b)Output:
>>>1 2>>>3 4>>>5 6>>>7 8👉Превратить строку в список.
>>>formatted_list = list(map(int, input().split()))>>>print (formatted_list)Output:
>>>[1, 2, 3]👉Превратить список списков в один список.
>>>import itertools>>>list1 = [[1,2], [3,4], [5,6]]>>>lst = list(itertools.chain.from_iterable(list1))Output:
>>>[1, 2, 3, 4, 5, 6]👉Раздробить список в группы.
>>>list1 = ['Sun', 'Flowers', 'Peoples', 'Animals', 'Day', 'Night']>>>partition = list(zip(*[iter(list1)] * 2))>>>print(partition)Output:
>>>[('Sun', 'Flowers'), ('Peoples', 'Animals'), ('Day', 'Night')]🔥Must-Have Библиотеки для python разработчика.
👉PyGame - pygame - это бесплатная кросс-платформенная библиотека с открытым исходным кодом для разработки мультимедийных приложений, таких как видеоигры, с использованием Python.
👉Random - Этот модуль реализует генераторы псевдослучайных чисел для различных распределений.
👉Numpy - Фундаментальный пакет для научных вычислений с Python
👉OS - этот модуль обеспечивает переносимый способ использования функций, зависящих от операционной системы.
👉Collections - Этот модуль реализует специализированные типы данных контейнеров, предоставляя альтернативы встроенным контейнерам общего назначения Python.
👉SubProcess - Модуль подпроцесса позволяет создавать новые процессы, подключаться к их каналам ввода / вывода / ошибок и получать их коды возврата. Этот модуль предназначен для замены нескольких старых модулей и функций:
👉Functools - Модуль functools предназначен для функций высшего порядка: функций, которые действуют или возвращают другие функции. В общем, любой вызываемый объект может рассматриваться как функция для целей этого модуля.
👉Itertools - Этот модуль реализует ряд строительных блоков итератора, вдохновленных конструкциями из APL, Haskell и SML. Каждый был переработан в форме, подходящей для Python.
👉PyGame - pygame - это бесплатная кросс-платформенная библиотека с открытым исходным кодом для разработки мультимедийных приложений, таких как видеоигры, с использованием Python.
👉Random - Этот модуль реализует генераторы псевдослучайных чисел для различных распределений.
👉Numpy - Фундаментальный пакет для научных вычислений с Python
👉OS - этот модуль обеспечивает переносимый способ использования функций, зависящих от операционной системы.
👉Collections - Этот модуль реализует специализированные типы данных контейнеров, предоставляя альтернативы встроенным контейнерам общего назначения Python.
👉SubProcess - Модуль подпроцесса позволяет создавать новые процессы, подключаться к их каналам ввода / вывода / ошибок и получать их коды возврата. Этот модуль предназначен для замены нескольких старых модулей и функций:
👉Functools - Модуль functools предназначен для функций высшего порядка: функций, которые действуют или возвращают другие функции. В общем, любой вызываемый объект может рассматриваться как функция для целей этого модуля.
👉Itertools - Этот модуль реализует ряд строительных блоков итератора, вдохновленных конструкциями из APL, Haskell и SML. Каждый был переработан в форме, подходящей для Python.
Python documentation
random — Generate pseudo-random numbers
Source code: Lib/random.py This module implements pseudo-random number generators for various distributions. For integers, there is uniform selection from a range. For sequences, there is uniform s...
Так что же такое NaN
Not a number (не число) — состояние числа с плавающей запятой, при котором машине не удалось посчитать какое-то выражение.
Компьютер не в силах поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.
Его особенностью среди других чисел является то, что оно не равно самому себе.
Not a number (не число) — состояние числа с плавающей запятой, при котором машине не удалось посчитать какое-то выражение.
Компьютер не в силах поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.
Его особенностью среди других чисел является то, что оно не равно самому себе.
Что делает @staticmethod?
Иногда метод внутри класса не использует ни
Тогда —
Никаких ссылок на экземпляры — просто удобный способ логически сгруппировать функции внутри класса.
Иногда метод внутри класса не использует ни
self, ни cls.Тогда —
@staticmethod.class Math:
@staticmethod
def add(x, y):
return x + y
Никаких ссылок на экземпляры — просто удобный способ логически сгруппировать функции внутри класса.
👍1
Про functools
Это модуль с полезными функциями... для работы с функциями. Например:
Но и это ещё не всё, в модуле много фишек, которые можно узнать из документации.
Это модуль с полезными функциями... для работы с функциями. Например:
@cache — простой легкий неограниченный кеш функций. Если функция долго вычисляется, то вы можете сохранить сохранить результат в памяти, чтобы потом его не считать, а брать оттуда.partial(func, *args, **keywords) — возвращает вызываемый объект, который вызывает полученную функция с переданными при создании аргументами и во время вызова.Но и это ещё не всё, в модуле много фишек, которые можно узнать из документации.
Цепочка операторов
Синтаксический сахар для упрощения проверок. Работает со всеми операторами сравнения (<, ==, >, ...), is и in. Цепь может состоять из любого количества операторов.
Хочу заметить, что цепь не создаёт никаких связей, так что вы вполне можете написать так:
Синтаксический сахар для упрощения проверок. Работает со всеми операторами сравнения (<, ==, >, ...), is и in. Цепь может состоять из любого количества операторов.
Хочу заметить, что цепь не создаёт никаких связей, так что вы вполне можете написать так:
x < y > z. Если увидите это на проде, пишите git blame и ищите, кому бить морду.Что такое `self` в методах класса?
Без
self — это ссылка на текущий экземпляр класса. Через неё мы получаем доступ к атрибутам и методам объекта.class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} лает")
rex = Dog("Рекс")
rex.bark() # Рекс лает
Без
self Python не поймёт, к какому объекту относятся переменные внутри класса.👍2
Хочешь использовать ChatGPT, BERT, Stable Diffusion, T5 и другие мощные модели прямо в Python-коде?
Бери
Умеет:
* Загружать готовые модели
* Работать с текстом, изображениями, аудио
* Генерировать, классифицировать, переводить, резюмировать
Пример генерации текста:
Установка:
⚡️ Бонус: можно использовать как с PyTorch, так и с TensorFlow. Под капотом самые топовые модели AI.
Бери
transformers от Hugging Face.Умеет:
* Загружать готовые модели
* Работать с текстом, изображениями, аудио
* Генерировать, классифицировать, переводить, резюмировать
Пример генерации текста:
from transformers import pipeline
generator = pipeline("text-generation", model="gpt2")
result = generator("В далёком будущем", max_length=30, num_return_sequences=1)
print(result[0]["generated_text"])
Установка:
pip install transformers
⚡️ Бонус: можно использовать как с PyTorch, так и с TensorFlow. Под капотом самые топовые модели AI.
❤1👍1
Что не так с этим кодом и зачем это нужно
Этот код вызывает ошибку утверждения assert с сообщением «error», если debug равен True. debug — это встроенная переменная Python, которая является истинной, если к интерактивной консоли или скрипту был присоединен флаг оптимизации -O. Для типичных скриптов в режиме отладки эта переменная равна True. Если оптимизация включена, то интерпретатор Python игнорирует все операторы утверждения assert, поэтому этот код не вызовет ошибку в optimized mode.
Такой код может быть использован для проверки инвариантов в программе или для отладки кода. Если утверждение не выполняется и вызывается AssertionError, это означает, что в программе произошло что-то непредвиденное, что нарушило заданное утверждение, и программа остановится с сообщением об ошибке.
Этот код вызывает ошибку утверждения assert с сообщением «error», если debug равен True. debug — это встроенная переменная Python, которая является истинной, если к интерактивной консоли или скрипту был присоединен флаг оптимизации -O. Для типичных скриптов в режиме отладки эта переменная равна True. Если оптимизация включена, то интерпретатор Python игнорирует все операторы утверждения assert, поэтому этот код не вызовет ошибку в optimized mode.
Такой код может быть использован для проверки инвариантов в программе или для отладки кода. Если утверждение не выполняется и вызывается AssertionError, это означает, что в программе произошло что-то непредвиденное, что нарушило заданное утверждение, и программа остановится с сообщением об ошибке.
❤1
🔋 PikaPython — ультралегкий интерпретатор Python для микроконтроллеров. Проект позволяет запускать Python-код на устройствах с 4 КБ RAM и 64 КБ Flash. Не требует операционной системы и работает через REPL по UART.
Инструмент имеет встроенный прекомпилятор для автоматической генерации биндингов C-функций из .pyi файлов. Есть готовые BSP для популярных MCU и демо-проекты.
🤖 GitHub
Инструмент имеет встроенный прекомпилятор для автоматической генерации биндингов C-функций из .pyi файлов. Есть готовые BSP для популярных MCU и демо-проекты.
🤖 GitHub
Логические any и all
Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем и выразителен. Предлагаю взглянуть на следующий код:
Функция
На мой взгляд, эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании.
Одна из многих причин, почему Python является таким популярным языком, заключается в том, что он читаем и выразителен. Предлагаю взглянуть на следующий код:
statements = [True, True, False]
if any(statements):
print('Как минимум одно выражение истинно')
if all(statements):
print('Все выражения истинны')
if any(statements) and not all(statements):
print('Как минимум одно выражение истинно и одно не истинно')Функция
any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – когда все верны.На мой взгляд, эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании.
Оператор pass делает абсолютно ничего, то есть совсем ничего.
В ходе исполнения данного оператора ничего не происходит, поэтому он может использоваться в качестве некой заглушки в тех местах, где это синтаксически необходимо.
Например, вам надо сделать несколько функций, вы написали def'ы и названия, но сам код еще не успели, однако программу надо запустить и проверить что-то другое. Вот тут и понадобится pass.
Ну или в конструкции try-except, чтобы просто проигнорировать и никак не обрабатывать ошибку в программе.
В общем, полезная штука, используйте.
В ходе исполнения данного оператора ничего не происходит, поэтому он может использоваться в качестве некой заглушки в тех местах, где это синтаксически необходимо.
Например, вам надо сделать несколько функций, вы написали def'ы и названия, но сам код еще не успели, однако программу надо запустить и проверить что-то другое. Вот тут и понадобится pass.
def func():
passНу или в конструкции try-except, чтобы просто проигнорировать и никак не обрабатывать ошибку в программе.
try:
any_function()
except:
pass
В общем, полезная штука, используйте.
Использование списков в качестве стеков
Стек — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Методы встроенного списка в Python позволяют очень легко использовать список в виде стека. Чтобы добавить элемент на вершину стека, используйте
Стек — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Методы встроенного списка в Python позволяют очень легко использовать список в виде стека. Чтобы добавить элемент на вершину стека, используйте
append(). Чтобы извлечь элемент из верхней части стека, используйте pop() без явного индекса. Пример:>>> stack = [3, 4, 5]>>> stack.append(6)>>> stack[3, 4, 5, 6]>>> stack.pop()6>>> stack[3, 4, 5]>>> stack.pop()5👍2
Как писать хороший код на python?🤔📄
✅Умение правильно и хорошо писать код — это важный навык для python-разработчика. Как научится писать хороший код — вы узнаете из сегодняшней статьи. Говоря о „хорошем коде“ имеется в виду большое количество факторов с которыми вам предстоит познакомиться, чтобы писать правильный и "конвейерный" код.
Возможно, самый известный сборник этих факторов Python был написан Тимом Питерсом, давний участник языка и его группы новостей comp.lang.python.
Этот сборник также известен под названием «The Zen of Python» и в нём изложены следующие факторы „хорошего кода“.
👉🏻 The Zen of Python, by Tim Peters 👈🏻
· Beautiful is better than ugly — Красивое — лучше, чем уродливое
· Explicit is better than implicit — Явное лучше, чем неявное.
· Simple is better than complex — Простое лучше, чем сложное.
· Complex is better than complicated - Сложное лучше, чем запутанное.
· Flat is better than nested - Плоский лучше, чем вложенный.
· Sparse is better than dense - Редкое лучше, чем частое.
· Readability counts - Читаемость имеет значение.
· Special cases aren't special enough to break the rules - Особых случаев недостаточно, чтобы нарушать правила.
· Although practicality beats purity - Хотя практичность лучше чистоты.
· Errors should never pass silently - Ошибки никогда не должны замалчиваться.
· Unless explicitly silenced — Если только они не замалчиваются явно.
· In the face of ambiguity, refuse the temptation to guess – Перед лицом двусмысленности откажитесь от соблазна угадать.
· There should be one -- and preferably only one -- obvious way to do it. – Должен быть один - и желательно только один - очевидный способ сделать это.
· Although that way may not be obvious at first unless you're Dutch – Хотя поначалу этот способ может быть не очевиден, если вы не голландец.
· Now is better than never – Лучше сейчас, чем никогда.
· Although never is often better than *right* now – Хотя никогда не бывает лучше, чем прямо сейчас.
· If the implementation is hard to explain, it's a bad idea – Если реализацию сложно объяснить, это плохая идея.
· If the implementation is easy to explain, it may be a good idea – Если реализацию легко объяснить, это может быть хорошей идеей.
· Namespaces are one honking great idea -- let's do more of those! – Пространства имен - одна отличная идея - давайте сделаем их больше!
Эти факторы можно быстро заполучить просто написав в интерпретаторе
***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
✅Умение правильно и хорошо писать код — это важный навык для python-разработчика. Как научится писать хороший код — вы узнаете из сегодняшней статьи. Говоря о „хорошем коде“ имеется в виду большое количество факторов с которыми вам предстоит познакомиться, чтобы писать правильный и "конвейерный" код.
Возможно, самый известный сборник этих факторов Python был написан Тимом Питерсом, давний участник языка и его группы новостей comp.lang.python.
Этот сборник также известен под названием «The Zen of Python» и в нём изложены следующие факторы „хорошего кода“.
👉🏻 The Zen of Python, by Tim Peters 👈🏻
· Beautiful is better than ugly — Красивое — лучше, чем уродливое
· Explicit is better than implicit — Явное лучше, чем неявное.
· Simple is better than complex — Простое лучше, чем сложное.
· Complex is better than complicated - Сложное лучше, чем запутанное.
· Flat is better than nested - Плоский лучше, чем вложенный.
· Sparse is better than dense - Редкое лучше, чем частое.
· Readability counts - Читаемость имеет значение.
· Special cases aren't special enough to break the rules - Особых случаев недостаточно, чтобы нарушать правила.
· Although practicality beats purity - Хотя практичность лучше чистоты.
· Errors should never pass silently - Ошибки никогда не должны замалчиваться.
· Unless explicitly silenced — Если только они не замалчиваются явно.
· In the face of ambiguity, refuse the temptation to guess – Перед лицом двусмысленности откажитесь от соблазна угадать.
· There should be one -- and preferably only one -- obvious way to do it. – Должен быть один - и желательно только один - очевидный способ сделать это.
· Although that way may not be obvious at first unless you're Dutch – Хотя поначалу этот способ может быть не очевиден, если вы не голландец.
· Now is better than never – Лучше сейчас, чем никогда.
· Although never is often better than *right* now – Хотя никогда не бывает лучше, чем прямо сейчас.
· If the implementation is hard to explain, it's a bad idea – Если реализацию сложно объяснить, это плохая идея.
· If the implementation is easy to explain, it may be a good idea – Если реализацию легко объяснить, это может быть хорошей идеей.
· Namespaces are one honking great idea -- let's do more of those! – Пространства имен - одна отличная идея - давайте сделаем их больше!
Эти факторы можно быстро заполучить просто написав в интерпретаторе
import this
После чего вы получите данный список.***
Без пониманий этих факторов ваш код будет непригодным для больших, и без того сложных проектов.
***
❤1