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