Ускорение работы на Python
Написание скриптов на Python для решения самых разных задач — одно из моих любимых занятий. Когда самостоятельно доходишь до ответа, который предлагает Python в той или иной ситуации, всегда получаешь от этого удовольствие. И даже когда не знаешь решения, но быстренько заходишь на сайт Stack Overflow и обнаруживаешь, что кто-то в Интернете уже решил эту задачу, тебя тоже охватывает нежданная радость.
В этой статье я поделюсь 9 скриптами Python для решения практических задач и преодоления трудностей, с которыми вы наверняка столкнетесь при работе с Python.
1. Создание словарей с defaultdict и лямбда-функциями
from collections import defaultdict
import numpy as np
q = defaultdict(lambda: np.zeros(5))
# Пример вывода
In [34]: q[0]
Out[34]: array([0., 0., 0., 0., 0.])
Самое крутое в defaultdicts
— это то, что они никогда не вызовут ошибку KeyError
. Любой несуществующий ключ получает значение, возвращаемое функцией default factory
(в данном случае это лямбда-функция), которая возвращает массив NumPy по умолчанию с 5 нулями для любого предоставляемого вами ключа.
2. Основной рецепт регулярных выражений
import re
pattern = re.compile(r”\d\d”)
print(re.search(pattern,"Let's find the number 23").group())
# или
print(re.findall(pattern, “Let's find the number 23”))[0]
# Выходные данные
'23'
'23'
Регулярные выражения обязательны для многих конвейеров Python, поэтому неплохо бы всегда помнить основной рецепт регулярных выражений.
3. Получение разницы между двумя списками с помощью множеств
list1 = [1,2,3,4,5]
list2 = [3,4,5]
print(list(set(list1) — set(list2)))
# или
print(set(lista1).difference(set(lista2)))
# Выходные данные
[1,2]
{1,2}
Здесь множества дают два простых способа получения разницы между двумя списками Python: в виде списка и в виде множества.
4. Частично определенные функции
from functools import partial
def multiply(x,y):
return x*y
dbl = partial(multiply,2)
print(dbl)
print(dbl(4))
# Выходные данные
functools.partial(<function multiply at 0x7f16be9941f0>, 2)
8
Здесь создается функция, которая копирует другую, но принимает меньшее количество аргументов, чем исходная функция, для применения этого аргумента к нескольким разным аргументам.
5. Использование встроенного метода hasattr() для получения атрибута объекта
class SomeClass:
def __init__(self):
self.attr1 = 10
def attrfunction(self):
print("Attreibute")
hasattr(SomeClass, "attrfunction")
# Вывод
True
6. Проверка переменной на соответствие заданному типу с помощью isinstance()
isinstance(1, int)
#Вывод
True
7. Вывод чисел списка с помощью map()
list1 = [1,2,3]
list(map(print, list1))
# Вывод
1
2
3
Так вывести содержимое списка быстрее и эффективнее, чем с циклами for
.
8. Форматирование данных формата datetime с помощью метода .join()
from datetime import datetime
date = datetime.now()
print("-".join([str(date.year), str(date.month), str(date.day)])
# Вывод
'2021-6-7'
9. Случайная выборка элементов двух списков с одним и тем же правилом
import numpy as np
x = np.arange(100)
y = np.arange(100,200,1)
idx = np.random.choice(np.arange(len(x)), 5, replace=False)
x_sample = x[idx]
y_sample = y[idx]
print(x_sample)
print(y_sample)
# Выходные данные
array([68, 87, 41, 16, 0])
array([168, 187, 141, 116, 100])
Заключение
Улучшение работы со скриптами предполагает наличие в арсенале разработчика хорошо зарекомендовавших себя фрагментов кода, позволяющих избегать необходимости каждый день изобретать колесо.
Читайте также:
- Как писать код на Python лучше: 6 рекомендаций
- 3 способа локального хранения и чтения учетных данных в Python
- Python и веб-разработка: краткое руководство
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Lucas Soares: 9 Essential Python Snippets to Optimize your Scripting Routine