12 небольших фишек для улучшения твоего кода
1. Обмен значений
1. Обмен значений
x, y = 1, 22. Получение строки из списка
x, y = y, x
a_list = [‘I’, ‘like’, ‘python’, ‘programming’]3. Разбиение строки на список
a_string = “ “.join(a_list)
a_string = ‘I like python programming’4. Инициализация листа каким либо значением
a_list = a_string.split()
[0]*1000 # лист, заполненный 1000 нулями5. Слияние словарей
[1]*1000 # лист, заполненный 1000 единицами
x = {‘a’:1, ‘b’:2}
y = {‘c’:3, ‘d’:4}
z = {**x, **y}
6. Переворачивание строкиa = ‘My string’7. Возврат нескольких переменных из функции
a = a[::-1]
def test(x,y):8. Итерирование по словарю
return x,y
a,b = test(1,2)
a_dict = {‘a’:1, ‘b’:2, ’c’:3}
for k, v in a_dict.items():
print(‘{0}:{1}’.format(k, v))
9. Инициализация пустых контейнеровa_list = list()10. Удаление символов в конце строки
a_dict = dict()
a_set = set()
a_tuple = tuple()
my_string = ‘My string///‘11. Проверка занимаемой объектом памяти
my_string.strip(‘/‘)
import sys12. Нахождение наиболее частого элемента в списке
x = 1
print(sys.getsizeof(x))
a_list = [1, 2, 3, 1, 1, 4, 1, 4, 4, 1]
print(max(set(a_list), key=a_list.count))
❤1👍1👎1
Что такое
Каждый раз, когда мы импортируем код, он весь выполняется точно так же, словно мы его просто запустили. Чтобы избежать странного поведения, как на картинке, стоит использовать
Переменная получает значение '
__name__ ?Каждый раз, когда мы импортируем код, он весь выполняется точно так же, словно мы его просто запустили. Чтобы избежать странного поведения, как на картинке, стоит использовать
__name__.Переменная получает значение '
__main__', если программу запустили напрямую (python file.py). Если же файл импортировали как модуль, он получает своё название.Фабричный метод
Фабричный метод используется как средство предоставления фабричных интерфейсов для создания объектов.
Они позволяют ослабить связи в коде и упростить его: чаще всего он используется, если вам нужно создать объект по какому-то условию.
Таким образом, мы перемещаем большое количество if/elif/else-кода в отдельный метод.
Фабричный метод используется как средство предоставления фабричных интерфейсов для создания объектов.
Они позволяют ослабить связи в коде и упростить его: чаще всего он используется, если вам нужно создать объект по какому-то условию.
Таким образом, мы перемещаем большое количество if/elif/else-кода в отдельный метод.
📌Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
✅Результат:
🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
✅Результат:
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum():
Cинтакс функции sum().
sum(iterable, start)Параметры sum():
iterable - итерируемые типы (list , dict , tuple, и.т.д.)
start - (необезательно) - значение этого параметра прибавляется к уже готовой сумме элементов iterable.По умолчанию значение этого парметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов iterable.
Пример:
numbers = [1,5,5]#парметр start передается со значением по умолчанию(0).numbers_sum = sum (numbers);print (numbers_sum)# парметр start передается со значением 7.numbers_sum = sum (numbers, 7)print (numbers_sum)✅Результат:
1118🔴Примечания:
Если вам нужно использовать sum() с floating-point элементами iterable с правильной точностью после запятой , до использования
sum(iterable , start) , нужно вместе c import math добавить следующую строку. math.fsum(iterable).Если вам нужно соединить(concatenate) элементы iterable (элементы должны быть string), тогда вы можете использовать метод join()
Пример:
myTuple = ("Python", "Lounge", "is", "the","best")x = " ".join(myTuple)print (x)✅Результат:
Python Lounge is the bestДекораторы
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
Это функции, которые меняют поведение других функций, не меняя код внутри них.
Сами по себе декораторы составляют вызываемый объект (функция, класс с
__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