• en
  • Language: ru
  • Documentation version: latest

20. Односложные фразы

В этой главе я покажу вам несколько однострочных команд Python, которые могут оказаться очень полезными.

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

Вы когда-нибудь хотели быстро поделиться файлом по сети? Тогда вам повезло. В Python есть функция специально для вас. Перейдите в каталог, который вы хотите передать по сети, и напишите в терминале следующий код:

# Python 2
python -m SimpleHTTPServer

# Python 3
python -m http.server

Прекрасная печать

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

from pprint import pprint

my_dict = {'name': 'Yasoob', 'age': 'undefined', 'personality': 'awesome'}
print(dir(my_dict))
# ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

pprint(dir(my_dict))
# ['__add__',
#  '__class__',
#  '__contains__',
#  '__delattr__',
#  '__delitem__',
#  '__dir__',
#  '__doc__',
#  '__eq__',
#  '__format__',
#  '__ge__',
#  '__getattribute__',
#  '__getitem__',
#  '__gt__',
#  '__hash__',
#  '__iadd__',
#  '__imul__',
#  '__init__',
#  '__init_subclass__',
#  '__iter__',
#  '__le__',
#  '__len__',
#  '__lt__',
#  '__mul__',
#  '__ne__',
#  '__new__',
#  '__reduce__',
#  '__reduce_ex__',
#  '__repr__',
#  '__reversed__',
#  '__rmul__',
#  '__setattr__',
#  '__setitem__',
#  '__sizeof__',
#  '__str__',
#  '__subclasshook__',
#  'append',
#  'clear',
#  'copy',
#  'count',
#  'extend',
#  'index',
#  'insert',
#  'pop',
#  'remove',
#  'reverse',
#  'sort']

Это более эффективно для вложенных dict s. Более того, если вы хотите быстро распечатать json из файла, вы можете просто сделать это:

cat file.json | python -m json.tool

Профилирование сценария

Это может быть чрезвычайно полезно для выявления узких мест в ваших сценариях:

python -m cProfile my_script.py

Примечание: cProfile является более быстрой реализацией profile, так как он написан на языке c

CSV в json

Запустите это в терминале:

python -c "import csv,json;print json.dumps(list(csv.reader(open('csv_file.csv'))))"

Убедитесь, что вы заменили csv_file.csv на соответствующее имя файла.

Уплотнение списка

Вы можете быстро и легко сплющить список, используя itertools.chain.from_iterable из пакета itertools. Вот простой пример:

a_list = [[1, 2], [3, 4], [5, 6]]
print(list(itertools.chain.from_iterable(a_list)))
# Output: [1, 2, 3, 4, 5, 6]

# or
print(list(itertools.chain(*a_list)))
# Output: [1, 2, 3, 4, 5, 6]

Однолинейные конструкторы.

Избегайте большого количества шаблонных заданий при инициализации класса

class A(object):
    def __init__(self, a, b, c, d, e, f):
        self.__dict__.update({k: v for k, v in locals().items() if k != 'self'})

Дополнительные односложные фразы можно найти на Python website.