Python. Пять уловок, которые нужно знать, уже сегодня.

Перевод статьи: Enoch Kan: Five Python Tricks You Need to Know Today

Будь вы старшим инженером AI или студентом первого курса биологии — рано или поздно вы столкнётесь с языком программирования Python. После релиза, в 1991 году, Python быстро стал любимым языком программистов и технологов. Согласно рейтингу Stack Overflow, основанному на проявлении интереса к языкам, в развитых странах, Python быстро набирает популярность.

Невероятный взлёт Python — David Robinson

Python — высокоуровневый, интерпретируемый язык с относительно простым синтаксисом, идеально подойдет даже тем, кто ранее не программировал. Популярные библиотеки Python, хорошо интегрированы и используются в различных областях, например в биоинформатике (biopython), науке о данных (pandas), машинном обучении (keras/tensorflow) и даже в астрономии (astropy). После изучения C и Java, в качестве моих первых языков программирования, на освоение Python мне понадобилось несколько недель, достаточно было погуглить. Код выполняется гораздо медленнее, чем в Java и других языках, тем не менее Python на самом деле повышает продуктивность, благодаря хорошо налаженной интеграции процессов.


Уловка №1: Сила «однострочников» (One-Liners)

Вы устали пробираться между строк кода и теряться в условных конструкциях? Тогда, однострочники Python — это то, что вам нужно. Например, такая конструкция:

>>> if alpha > 7:
>>> beta = 999
>>> elif alpha == 7:
>>> beta = 99
>>> else:
>>> beta = 0

может быть упрощена:

>>> beta = 999 if alpha > 7 else (beta == 99 if alpha == 7 else 0)

До смешного просто! Если уделять больше внимания коду, который вы пишите, всегда найдется место, где можно упростить его однострочником. Кроме условных конструкций, упрощать можно и циклы for. Например, удвоение списка целочисленных, в четырех строках:

>>> lst = [1, 3, 5]
>>> doubled = []
>>> for num in lst:
>>> doubled.append(num*2)

можно упростить до одной строки:

>>> doubled = [num * 2 for num in lst]

Конечно, если всюду использовать однострочники, это будет выглядеть неопрятно. Старайтесь не переусердствовать с сокращениями в своём коде, кто-то даже скажет, что широкое применение такого подхода - не канон.

>>> import pprint; pprint.pprint(zip(('Byte', 'KByte', 'MByte', 'GByte', 'TByte'), (1 << 10*i for i in xrange(5))))

Уловка №2: Быстрые действия со строками

Манипуляции со строками порой вызывают сложности, но в Python есть сокращения, которые облегчат вашу жизнь. Чтобы сделать реверс строки, просто добавьте ::-1 в качестве списка индексов.

>>> a =  "ilovepython" 
>>> print a[::-1]
nohtypevoli

Такую уловку можно применить и к списку с числами. Манипулировать строками в Python, чрезвычайно просто. Например, вам нужно вывести предложение, используя предопределённые переменные: str1, str2 и lst3

>>> str1 = "Totally"
>>> str2 = "Awesome"
>>> lst3 = ["Omg", "You", "Are"]

Просто используйте метод .join() и арифметические операторы, чтобы создать нужное предложение.

>>> print ' '.join(lst3)
Omg You Are
>>> print ' '.join(lst3)+' '+str1+' '+str2
Omg You Are Totally Awesome

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


Уловка №3 Комбинации вложенных списков

Пожалуй, одна из моих любимых библиотек в Python — это itertools. Чтобы преобразить код, содержащий десятки списков, в глубоко вложенный список, достаточно нескольких манипуляций. itertools именно то, что вам нужно, чтобы решить эту задачу.

>>> import itertools
>>> flatten = lambda x: list(itertools.chain.from_iterable(x))
>>> s = [['"', 'An', 'investment'], ['in'], ['knowledge'], ['pays'], ['the', 'best'], ['interest."', '--'], ['Benjamin'], ['Franklin']]
>>> print(' '.join(flatten(s)))
" An investment in knowledge pays the best interest." -- Benjamin Franklin

Из приведенного выше примера видно, как мы можем объединить вложенные списки и строки с помощью .join() и itertools. Метод .combinations() из библиотеки itertools, мощный инструмент, для возврата длины последовательностей элементов, из входных итераций. Нажмите здесь, чтобы узнать больше об itertools.


Уловка №4 Простые структуры данных

Возвращаясь к пункту №1. Однострочником, также очень просто вызвать инициализацию структур данных в Python. Гарольд Купер, реализовал однострочную древовидную структуру, используя следующий код:

>>> def tree(): return defaultdict(tree)

Приведенный выше код просто определяет древо, которое является словарём, со значением по умолчанию tree. Другие однострочные функции, как например генератор простых чисел:

>>> reduce( (lambda r,x: r-set(range(x**2,N,x)) if (x in r) else r), 
range(2,N), set(range(2,N)))

можно найти на Github и Stack Overflow. Также в Python есть мощная библиотека Collections, которая поможет решить множество насущных проблем, без написания длинного кода.

>>> from collections import Counter
>>> myList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]
>>> print(Counter(myList))
Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})

Уловка №5 Упрощенный вывод данных

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

>>> row = ["1", "bob", "developer", "python"]
>>> print(','.join(str(x) for x in row))
1,bob,developer,python

Можно использовать однострочник:

>>> print(*row, sep=',')
1,bob,developer,python

Еще один элегантный способ вывода, использовать enumerate . Эта встроенная в Python функция невероятно полезна. Так, вместо четырёх строк кода:

>>> iterable = ['a','b','c']
>>> c = 0
>>> for item in iterable:
>>> print c, item
>>> c+= 1
0 a
1 b
2 c

тоже самое, можно записать двумя:

>>> for c, item in enumerate(iterable):
>>> print c, item

В Python, есть еще сотни тысяч подобных уловок, например pprint для форматирования кода.

Evgeny Vladimirovich

Written by

NOP::Nuances of programming

Перевод и адаптация статей в сфере IT

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade