Фишки Python, о которых вы должны знать

Несколько полезных, но малоизвестных фишек Python. 

python

Python — один из самых популярных языков программирования. Он славится своим простым синтаксисом и распространенностью в совершенно разных областях — особенно в data science. Еще одной особенностью Python является его сообщество — именно оно наращивает и без того внушительный функционал языка. 

Python имеет в своем вооружении более 290 тысяч пакетов, которые вы можете скачать из Python Package Index (PyPi). Все эти пакеты используются для разных целей: веб-разработка, машинное обучение, научные вычисления и т. д. 

Чем больше вы пишете на Python, тем больше узнаете о приемах работы с этим языком. Сегодня мы познакомимся с не особо популярными фишками, но в то же время очень полезными. Они помогут вам во многих сценариях.

Начнем!

1. Именованные кортежи

Именованные кортежи — это легковесные объекты. Их преимущество заключается в том, что создавать их очень просто. Для этого потребуется встроенная функция, доступная в модуле Collections.

Если вам нужен класс для управления данными — рассмотрите в качестве альтернативы именованные кортежи.

from collections import namedtuple

Coordinate = namedtuple("Coordinate", "longitude latitude")
location = Coordinate(90, 37.5)
print("местонахождение:", location)

# получаем доступ к атрибуту с помощью точки
print(location.longitude, location.latitude)

# Вывод:
местонахождение: Coordinate(longitude=90, latitude=37.5)
(90, 37.5)

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

2. Блок for…else 

Все мы знаем, что else неразрывно связан с блоком if, но вы, возможно, не в курсе, что else используется в цикле for

В выражении for...else блок else выполняется только в том случае, если все итерации цикла будут успешно завершены. Если же выполнение цикла прерывается оператором break, то else не выполняется.

Случай первый:

for letter in 'foo':
    print(letter)
else:
    print('Все буквы напечатаны')

# Вывод:
f
o
o
Все буквы напечатаны

Случай второй:

for letter in 'foo':
    print(letter)
    if letter == 'o':
        break
else:
    print('Все буквы напечатаны')

# Вывод:
f
o

Во втором случае блок else не выполняется, потому что мы завершаем цикл с помощью break.

3. Распаковка аргументов

При вызове функции мы должны передать в нее что-то — аргументы, параметры. Обычно мы передаем их по отдельности. 

В Python можно распаковать список или словарь и передать его содержимое в качестве аргументов с помощью * и **.

def total(a, b, c):
    return a+b+c
list1 = [1,2,3]
print(total(*list1))

# Вывод:
6

4. Красивый вывод с помощью pprint

pprint — полезный модуль и, что замечательно, встроенный в стандартную библиотеку Python. Как видно из имени, pprint (pretty printer; англ. pretty — приятный, красивый) — используется для вывода данных и их структур в более приятном для чтения формате.

Вывод этого модуля гораздо приятнее глазу, чем тот, которым располагает встроенный print

from pprint import pprint
response = [ 
    {"статус": 200 , "результат": [1,2,3,4,5]},
    {"статус": "OK", "результат": ['Привет', 'мир!']},
    {"статус": 404, "результат": "данные не найдены"}
]

# распечатка с помощью print
print(response)

# распечатка с помощью pprint 
pprint(response)

Вывод:

# распечатка с помощью print
[{'статус': 200, 'результат': [1, 2, 3, 4, 5]}, {'статус': 'OK', 'результат': ['Привет', 'мир!']}, {'статус': 404, 'результат': 'данные не найдены'}]

# распечатка с помощью pprint
[{'результат': [1, 2, 3, 4, 5], 'статус': 200},
 {'результат': ['Привет', 'мир!'], 'статус': 'OK'},
 {'результат': 'данные не найдены', 'статус': 404}]

Как можете заметить, pprint выводит информацию аккуратнее, а читать ее гораздо проще. 

5. Перечисления с помощью enum

В Python перечисление может быть реализовано с помощью модуля enum. Перечисления полезны при объявлении неизменяемых и связанных между собой наборов констант. Примером могут послужить дни недели (с понедельника по воскресенье).

Перечисления создаются с помощью классов. В них содержатся переменные и связанные с ними значения.

from enum import Enum
Season = Enum('Season', 'winter summer spring autumn')
print(Season.summer.name)
print(Season.summer.value)

# пишем класс
class Season(Enum):
    winter = 1
    summer = 2
    spring = 3
    autumn = 4
print(Season.winter.name)
print(Season.winter.value)

Вывод:

summer
2
winter
1

Итоги

В этой статье мы разобрали несколько полезных фишек Python, которые можно использовать в различных сценариях. Попробуйте использовать их в реальных проектах, и вы оцените, насколько они хороши.