27 Мар


2017

Python. Крутые и полезные фичи.

Питон обладает массой готовых решений позволяющих красивве оформить код, а также увеличить его скорость работы/читаемость. По сути задачи пробегания по списку в цикле, сложные вычисления и т.п можно реализовать 1 строкой. Конечно можно легко обойтись и без этого) но так круче!

Строки (str)

string.rstrip() - убрать символ конца строки, конечно если мы уверены в том что символ конца строки есть можно сделать string[:-2], но это лишь в том случае если мы уверены что строка имеет символ переноса каретки на новую строку.

Map

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

def cubic(x):
    return x**x

example_list = list(map(cubic, [1, 4, 256] ))
print(example_list)
>>> [1, 4, 256] 

В версии питона 3+ map возвращает объект, поэтому его нужно преобразовать в список

Zip

Тоже прикольная штука, жаль я не знал о ней когда много работал с двумерными массивами (без нампи, обычными списками).

объеденяет элементы списка по вертикали, например:

list1 = [10, 11, 12]
list2 = [1, 2, 3]
list3 = [5, 6, 8, 30]
zip(list1, list2)
>>>[(10, 1), (11, 2), (12, 3)]
zip(list1, list3)
>>>[(10, 5), (11, 6), (12, 8)]

при этом если по вертикали количество элементов различное, то лишние отбрасываются

Filter

Функция которая фильтрует (кто бы мог подумать) список по функции (1 аргумент). В качестве 1 аргумента удобно передавать лямбду.

lst1 = [123, 123, 12, 78]
list(filter((lambda x: 1 if x>100 else 0), lst1))
>>> [123, 123]

Virtualenv

Не вдаваясь в подробности это просто удобно. нет смысла расписывать о виртуальном окружении, вкратце - инкапсулирует модули проекта от основных модулей системы. Создается весьма просто:

virtualenv -p python=3.6 --no-site-packages <ИМЯ_ОКРУЖЕНИЯ>

Requirements

Позволяет записать в файл полезные модули, затем можно легко с помощью небольшого текстового файлика развернуть быстренько проект

pip freeze > requirements.txt

Ну и установить также просто, 1 вариант установит согласно версиям, 2 установит последнии версии модулей. (кроме того с помощью символов < >= можно задать диапазон версий.

pip install -r requirements.txt
pip install --upgrade -r requirements.txt

Интересные фишки:

Еще 1 интересным моментом, о котором я узнал в Лутсе 4 издание, является перебор итерируемого объекта с использование enumerate, разумеется я реализовывал подобное через range, но с этим инструментов все выходит куда компактнее, ах да, совсем забыл..он вощвращает не объекты из списка, а туплы, где первый индекс тупла это его номер в итерируемом объекта, а 2 это само значение. Ну и пример для ясности:

lst = [1, 12, 44, 66, 34234, 123123]
or item in enumerate(list):
...     print(item)
>>>(0, 1)
   (1, 12)
   (2, 44)
   (3, 66)
   (4, 34234)
   (5, 123123)

Динамическое подключение модуля

Бывает что модуль нужно подключить в случае срабатывания определенного условия, однако инструкция import "module_name" не работает, поэтому необходимо воспользоватья инструкцией exec (выполняет программный код)

exec(“import string“)

Тернарный оператор.

В качестве читаемости под вопросом, однако если код неочень большой и выражение легко читается то почему бы и нет.

>>> a = 4
>>> b = None
>>> print(b if b else a)
4

Другая полезная инфа(не вижу смысла переписывать)

 

фичи