10 фишек Python, которые поднимут ваш скилл на новый уровень

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

19К открытий25К показов

Когда-то на первых курсах по программированию нас в игривой манере сталкивали лбами: кто напишет код короче? И самые азартные принимались соревноваться за лаконичность сниппета. Выиграть у одногруппника было бодрящим чувством.

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

Моей первой группе Python точно показывали такие фишки. Но использовать сразу удалось не все, потому забылись они легко и непринужденно. Лишь спустя несколько лет к ним возвращаешься с энтузиазмом: «А действительно ли будет короче? Запомню ли теперь, когда есть зачем?»

Создатели языка ради таких фичей потратили сотни часов. Все, чтобы ваш код стал качественнее.

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

Генераторы списков (List Comprehension)

Для создания нового списка, где к каждому элементу применена функция. Это обеспечивает читаемость и отрабатывается компилятором быстрее.

			squares = [x**2 for x in range(1, 11)]
		

Перечисления (Enumeration)

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

			for index, value in enumerate(my_list):
print(f"{index}: {value}")
		

Лямбда-функции (Lambda Functions)

Создавайте небольшие анонимные функции с ключевым словом lambda. Лямбды просто созданы для того, чтобы их использовали в функциях высшего порядка в качестве аргумента. Это, безусловно, позволяет добиться более короткого кода.

			square = lambda x: x**2
		

Множественное назначение (Multiple Assignment)

Назначьте несколько переменных в одной строке, используя распаковку кортежа. Это невероятно удобный способ разложить любой сложный объект на независимые переменные. 

			my_tuple = ("Алиса", 30) # Наш кортеж

name, age = my_tuple # Непосредственно распаковка
print(name) # Выведет 'Алиса'
		

Извлечение части списка (Slicing)

Используйте извлечение части списка – слайсинг с указанием индексов начального и конечного элементов. Вместо того, чтобы создавать копию my_list, в примере ниже мы напрямую обращаемся к этому объекту. Это рациональное расходование памяти, и на больших объемах данных вы точно оцените эту фичу.

			my_list[1:4] # returns the sublist from index 1 (inclusive) to 4 (exclusive)
		

Включение (Dictionary Comprehension)

Позволит лаконично сгенерировать словари в сравнении с той же for loop, занимающей как минимум две строки. 

			squares = {x: x**2 for x in range(1, 11)}
		

«Моржовый» оператор (Walrus Operator)

:= присвоит значение переменной как части выражения.

			n = 0
while (n := n + 1) < 10:
     print(n)
		

F-строки (F-strings)

Само олицетворение интерполяции, то есть включения переменных в строковые выводы.

			name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
		

any() и all()

Функции проверят, удовлетворяют ли элементы объекта условию. 

any() принимает итерируемый объект (например, список nums) в качестве аргумента и возвращает True, если хотя бы один элемент в списке считается True. Если все элементы ложные или nums пуст, то any() возвращает значение False.

all() тоже принимает такой объект в качестве аргумента и возвращает значение True, если все элементы в нем считаются истинными, или если итерируемый объект пуст. Если там есть хотя бы один элемент, который считается False, то all() вернет False.

			nums = [1, 3, 5, 7, 9]
print(any(x % 2 == 0 for x in nums)) # False
print(all(x % 2 != 0 for x in nums)) # True
		

zip()

Функция создаст парные строки с именем и возрастом. Что может быть лучше, чем одновременная обработка сразу нескольких составных объектов, вроде списков? Более того, это открывает прекрасные возможности для манипуляции с данными. Вы можете, например, превратить столбцы таблицы в строки, если пожелаете.

			names = ["Alice", "Bob", "Charlie"]
ages = [30, 25, 22]
for name, age in zip(names, ages):
     print(f"{name} is {age} years old.")
		
Используете эти фишки?
Да, большую часть
Нет, не знал о них
Использую небольшую часть

В английском есть такой фразеологизм: ‘use it or lose it’ («применяй, а то потеряешь [этот навык]»). Пускай это будет игрушечный проект, но нейронные связи в мозгу образуются. И вскоре на митапе с парным программированием или на собеседовании вы сможете пощеголять тем или иным приемчиком.

Следите за новыми постами
Следите за новыми постами по любимым темам
19К открытий25К показов