Хитрости в Python'e

allenhere

Регистрация
30 Май 2018
Сообщения
30
Реакции
33
В этой статье собраны удобные приёмы, которые вполне могут упростить жизнь всем Python-программистам. Итак, не будем терять времени.
Перечисление
Вместо этого:
Python:
i=0
for item in iterable:
    print i, item
    i +=1
Можно сделать так:
Python:
for i, item in enumerate (iterable):
    print i, item
В enumerate можно указать и второй аргумент. Вот пример:
Python:
>>> list (enumerate('abc'))
[(0,'a'), (1,'b'), (2,'c')]
>>> list(enumerate('abc', 1)) 
[(1, 'a'), (2, 'b'), (3, 'c')]
Абстракция словарей/множеств
С абстракциями списков (list comprehension) вы скорее всего сталкивались, но вот с абстракциями словарей/множеств (dict/set comprehension) — вряд ли. Они просты в использовании и так же эффективны. Вот пример:
Python:
my_dict = {i: i * i for i in xrange(100)} 
my_set = {i * 15 for i in xrange(100)}
Деление с плавающей запятой
При делении целых чисел в Python результат будет целым, даже если на самом деле он был дробным. Чтобы получить корректный ответ, приходится делать что-то подобное:
result = 1.0/2
Но у этой проблемы есть и другое решение:
Python:
>>> from __future__ import division 
>>> result = 1/2
>>> print(result)
0.5
[!] Стоит отметить, что этот приём относится только к Python 2 — в третьей версии языка всё работает как нужно по умолчанию. [!]
Вычисление выражений Python
Вы наверняка знакомы с eval, но знаете ли вы о literal_eval? Вряд ли. Для безопасного исполнения выражений, содержащих исключительно литералы, вы можете делать так:
Python:
import ast 
expr = "[1, 2, 3]"
my_list = ast.literal_eval(expr)
А не так:
expr = "[1, 2, 3]" 
my_list = eval(expr)
Упрощение конструкций с if
Если вам нужно проверить несколько значений, сделайте так:
Python:
if n in [1,4,5,6]:
А не так:
Python:
if n==1 or n==4 or n==5 or n==6:
Разворачивание списка/строки
Быстро развернуть список можно следующим образом:
Python:
>>> a = [1,2,3,4]
>>> a[::-1]
[4, 3, 2, 1]

# Это создаёт новый развёрнутый список. 
# Развернуть имеющий список:

a.reverse()

То же самое можно сделать и со строкой:
>>> foo = "yasoob"
>>> foo[::-1]
'boosay'

Если вы знаете другие полезные приёмы, делитесь ими в комментариях!

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