Enumeration

Раньше мы делали это так:

i = 0
for item in iterable:
    print i, item
    i += 1

Теперь мы делаем это так:

for i, item in enumerate(iterable):
    print i, item

Функция enumerate также может принимать второй параметр, например так:

>>> list(enumerate('abc')) 
[(0, 'a'), (1, 'b'), (2, 'c')] 
 
>>> list(enumerate('abc', 1)) 
[(1, 'a'), (2, 'b'), (3, 'c')]

Словарные/множественные включения

Возможно, вы знаете, как делать списковые включения, но, возможно, не знаете, как делать словарные/множественные включения. Они просты, удобны и эффективны. Как в примере ниже:

my_dict = {i: i * i for i in xrange(100)} 
my_set = {i * 15 for i in xrange(100)}
 
# There is only a difference of ':' in both
 
# 两者的区别在于字典推导中有冒号

Принудительное деление с плавающей точкой

Если мы делим целое число, даже если результат является числом с плавающей точкой, Python 2 (примечание редактора: я добавил здесь номер версии) всё равно вернёт нам целое число. Чтобы избежать этой проблемы, нам нужно сделать так:

result = 1.0/2

Но теперь есть другой способ решить эту проблему, и я даже не подозревал, что такой метод существует. Можно сделать следующее:

from __future__ import division 
result = 1/2
# print(result)
# 0.5

Видите, теперь не нужно добавлять ".0" к данным, чтобы получить точный ответ. Обратите внимание, что этот приём работает только в Python 2. В Python 3 не нужно выполнять импорт, потому что он уже импортирован по умолчанию.

Простой сервер

Хотите быстро и удобно поделиться файлами в каталоге? Это можно сделать так:

# Python2
python -m SimpleHTTPServer

# Python 3
python3 -m http.server

Это запустит сервер.

Вычисление выражений Python

Мы все знаем функцию eval, но знаем ли мы функцию literal_eval? Возможно, многие нет. Можно использовать такую операцию:

import ast 
my_list = ast.literal_eval(expr)

чтобы заменить следующую операцию:

expr = "[1, 2, 3]"
my_list = eval(expr)

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

Профилирование скриптов

Вы можете легко профилировать скрипты, выполнив следующий код:

python -m cProfile my_script.py

Интроспекция объектов

В Python вы можете исследовать объекты с помощью функции dir(). Как в примере ниже:

>>> foo = [1, 2, 3, 4]
>>> dir(foo) 
['__add__', '__class__', '__contains__', 
'__delattr__', '__delitem__', '__delslice__', ... , 
'extend', 'index', 'insert', 'pop', 'remove', 
'reverse', 'sort']

Отладка скриптов

Вы можете легко устанавливать точки останова в своём скрипте с помощью модуля pdb. Как в примере ниже:

import pdb
pdb.set_trace()

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

Упрощение операторов if

Если вам нужно проверить несколько значений, вы можете использовать следующий метод:

if n in [1,4,5,6]:

чтобы заменить следующий способ:

if n==1 or n==4 or n==5 or n==6:

Обращение строк/последовательностей

Вы можете быстро перевернуть последовательность с помощью следующего метода:

>>> a = [1,2,3,4]
>>> a[::-1]
[4, 3, 2, 1]
 
# This creates a new reversed list. 
# If you want to reverse a list in place you can do:
 
a.reverse()

Этот метод также работает для обращения строк:

>>> foo = "yasoob"
>>> foo[::-1]
'boosay'

Форматированный вывод

Вы можете красиво выводить словари и последовательности следующим образом:

from pprint import pprint 
pprint(my_dict)

Этот способ эффективнее для вывода словарей. Кроме того, если вы хотите красиво вывести документ JSON из файла, вы можете использовать следующий метод:

cat file.json | python -m json.tool

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

Тернарный оператор — это сокращённая запись инструкций if-else, также известный как условное выражение. Вот несколько примеров для справки; они могут сделать ваш код более компактным и элегантным.

[on_true] if [expression] else [on_false]
x, y = 50, 25
small = x if x < y else y