Python на примерах
1.39K subscribers
411 photos
6 videos
145 links
Короткие уроки Python на примерах
Download Telegram
12 небольших фишек для улучшения твоего кода

1. Обмен значений
x, y = 1, 2
x, y = y, x

2. Получение строки из списка
a_list = [‘I’, ‘like’, ‘python’, ‘programming’]
a_string = “ “.join(a_list)

3. Разбиение строки на список
a_string = ‘I like python programming’
a_list = a_string.split()

4. Инициализация листа каким либо значением
[0]*1000 # лист, заполненный 1000 нулями
[1]*1000 # лист, заполненный 1000 единицами

5. Слияние словарей
x = {‘a’:1, ‘b’:2}
y = {‘c’:3, ‘d’:4}
z = {**x, **y}

6. Переворачивание строки
a = ‘My string’
a = a[::-1]

7. Возврат нескольких переменных из функции
def test(x,y):
return x,y
a,b = test(1,2)

8. Итерирование по словарю
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()
a_dict = dict()
a_set = set()
a_tuple = tuple()

10. Удаление символов в конце строки
my_string = ‘My string///‘
my_string.strip(‘/‘)

11. Проверка занимаемой объектом памяти
import sys
x = 1
print(sys.getsizeof(x))

12. Нахождение наиболее частого элемента в списке
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-кода в отдельный метод.
​​📌Функция sum() в python3
Как бы вы решили задачу получения суммы элементов
списка без обхода элементов в цикле?

Это можно сделать с помощью стандартной функции 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)

✅Результат:
11
18

🔴Примечания:

Если вам нужно использовать 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
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
nameless@pycoders:~$

Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.

import sys

try:
# code
except:
sys.exit()
👍2
Разница между is и ==

Каждый объект хранится в памяти и имеет свой номер, по которому можно его найти. Этот номер можно получить с помощью функции id().

is занимается сравниванием этих самых адресов. В то время как == вызывает функцию __eq__ и предназначения для сравнения значений класса.

Представьте куб, а потом ещё один такой же. Они одинаковые, но это два абсолютно разных объекта. Также и в программировании.
❤1👍1🤨1
💡Лайфхаки и памятки для питонистов

👉Вывести в консоль 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.
Так что же такое 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. Цепь может состоять из любого количества операторов.

Хочу заметить, что цепь не создаёт никаких связей, так что вы вполне можете написать так: 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-коде?
Бери 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
Работа с таблицами csv

В Python есть встроенная библиотека для работы с таблицами. Например, при парсинге сайта удобно оформлять результаты в таблицу, которую можно наглядно посмотреть в Excele или другом приложении. В примере представлено чтение из csv файла.
Что не так с этим кодом и зачем это нужно

Этот код вызывает ошибку утверждения assert с сообщением «error», если debug равен True. debug — это встроенная переменная Python, которая является истинной, если к интерактивной консоли или скрипту был присоединен флаг оптимизации -O. Для типичных скриптов в режиме отладки эта переменная равна True. Если оптимизация включена, то интерпретатор Python игнорирует все операторы утверждения assert, поэтому этот код не вызовет ошибку в optimized mode.

Такой код может быть использован для проверки инвариантов в программе или для отладки кода. Если утверждение не выполняется и вызывается AssertionError, это означает, что в программе произошло что-то непредвиденное, что нарушило заданное утверждение, и программа остановится с сообщением об ошибке.
❤1
Срезы итераторов

Если вы попытаетесь получить срез (slice) итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению
❤1
Оператор walrus (:=)

В этом примере мы используем оператор walrus (:=) для одновременного присваивания значения переменной line и проверки условия внутри цикла while. Это позволяет нам сократить код, объединив операции присваивания и проверки в одну строку.
👎1🙉1
🔋 PikaPython — ультралегкий интерпретатор Python для микроконтроллеров. Проект позволяет запускать Python-код на устройствах с 4 КБ RAM и 64 КБ Flash. Не требует операционной системы и работает через REPL по UART.

Инструмент имеет встроенный прекомпилятор для автоматической генерации биндингов C-функций из .pyi файлов. Есть готовые BSP для популярных MCU и демо-проекты.

🤖 GitHub
Проверка необходимой версии Python

В коде возможно проверить наличие актуальной версии Python. Например для предупреждения пользователей о несовместимой версии.
👍1