Python tricks | Хитрости Питона
5.67K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
Какой метод можно использовать для замены частей строки?
Anonymous Quiz
9%
replaceString()
5%
switch()
5%
repl()
81%
replace()
Номинальная типизация

При номинальной типизации (nominal type system) совместимость типов определяется, основываясь на явных декларациях в коде программы, например, на именах классов и иерархии наследования.

Если класс Duck явно объявлен наследником класса Bird, то объекты класса Duck могут быть использованы везде, где ожидаются объекты класса Bird. Применительно к Python, mypy может статически, без непосредственного запуска программы, основываясь только на исходном коде, проверить такую совместимость.
Что вернет это выражение?

100 > 0 == True
Anonymous Quiz
69%
True
12%
False
19%
SyntaxError
Структурная типизация

Структурная типизация (structural type system) определяет совместимость типов на основе структуры этих типов, а не на явных декларациях. Подобный механизм может рассматриваться как некоторый аналог утиной типизации, но для статических проверок, в некотором смысле compile time duck typing.

Структурная типизация также довольно широко распространена. Например, интерфейсы в Go – это набор методов, которые определяют некоторую функциональность. Типы, реализующие интерфейсы в Go не обязаны декларировать каким-либо образом, что они реализуют данный интерфейс, достаточно просто реализовать соответствующие методы интерфейса.

На примере класс Employee является подтипом Person, хотя в коде нет никаких явных деклараций наследования. Важно лишь то, что Employee имеет необходимые свойства name и age. Класс Figure, напротив, не имеет указанных свойств и, следовательно, не может быть использован там, где ожидается Person.
Что выведет код сверху?
Anonymous Quiz
48%
[1, 2, 3, 'abc']
7%
[1, 2, 3]
8%
Error
36%
[1, 2, 3, 'a', 'b', 'c']
Метод intersection()

Метод intersection() возвращает новый набор с элементами, общими для всех наборов. Пересечение двух или более наборов ‒ это набор элементов, общих для всех наборов.
Какая коллекция упорядочена, изменчива и допускает дублирование членов?
Anonymous Quiz
16%
dictionary
12%
set
59%
list
13%
tuple
PrettyTable в python

PrettyTable — это библиотека Python, разработанная для простого и быстрого отображения табличных данных в визуально удобных таблицах ASCII.

На примере добавлены данные по одному столбцу за раз. Для этого используется метод add_column, который принимает два аргумента, название столбца и список или кортеж, содержащий значения.
Что выведет код сверху?
Anonymous Quiz
26%
1, 2, 3
36%
3
7%
(3)
31%
Error
defaultdict: безошибочный словарь

Обычный словарь dict в Python содержит пары вида «ключ:значение». Значение из словаря можно запросить по ключу. В случае если запрашиваемого ключа в словаре нет, Python выдаст ошибку.

Поведение логичное, но не слишком удобное для работы. Словарь defaultdict из библиотеки collections поступает иначе: если запросить у такого продвинутого словаря ключ, которого в нём нет, он не обидится и не выкинет ошибку, а вместо этого:

— создаст этот ключ;
—создаст к нему значение, которое будет иметь тип, оговорённый по умолчанию («по дефолту» — отсюда, кстати, и название), — например, целое число или строку;
—вернёт вам это значение.
Что выведет код сверху?
Anonymous Quiz
13%
-6
5%
5
32%
-10
14%
-5
32%
Error
5%
10
Функция glob()

C помощью функции glob() мы можем получить список файлов, соответствующих определенному шаблону (мы должны определить этот конкретный шаблон внутри функции).

Список, возвращаемый функцией glob(), будет строкой, которая должна содержать спецификацию пути в соответствии с путем, который мы определили внутри функции. Строка или итератор для функции glob() фактически возвращает то же значение, что и функция iglob(), без фактического сохранения в ней этих значений (имен файлов).
Что выведет код?

print(50 and 100)
Anonymous Quiz
33%
50 100
7%
50
15%
100
45%
ни один из перечисленных
Функция escape()

Функция escape() становится очень действенным, поскольку позволяет нам избежать заданной последовательности символов, которую мы определили в функции.
Функция escape() очень удобна для поиска файлов, в именах которых есть определенные символы (как мы определим в функции). Она будет соответствовать последовательности, сопоставляя произвольную буквальную строку в именах файлов с этим специальным символом в них.

Escape() следует использовать с функцией glob() или iglob(), чтобы в результате мы могли распечатать список имен файлов в выходных данных.
Функция fork()

Функция fork() модуля os создает клон текущего процесса как дочерний процесс. Возвращает 0 в дочернем процессе и идентификатор дочернего процесса в родительском элементе. Если возникает ошибка, то возникает исключение OSError.

После разветвления, два процесса выполняют один и тот же код. Чтобы программа узнала, в каком она находится, она должна проверить возвращаемое значение os.fork(). Если значение равно 0, текущий процесс является дочерним. Если это не 0, программа выполняется в родительском процессе, а возвращаемое значение является идентификатором процесса дочернего процесса.
Что выведет код сверху?
Anonymous Quiz
7%
Python
7%
-1
43%
Error
30%
nothyP
13%
"