Повысьте эффективность написания кода на Python

Python

Я программирую на Python уже несколько лет и до сих пор часто поражаюсь тому, насколько лаконичным может быть код Python и насколькоDRY. Я узнал много советов и приемов, в основном из чтения исходного кода проектов с открытым исходным кодом, таких какDjango, Flask, RequestsЖдать.

Здесь я выбрал некоторые из них, которые иногда упускают из виду, но они могут оказать большую помощь в вашей повседневной работе.

1. Словарь и множество определений


Большинство разработчиков Python знают, как использовать генераторы списков. Вы не знакомы с этим? Понимание списков — это короткий способ создания списков:

>>> some_list = [1, 2, 3, 4, 5]
>>> another_list = [ x + 1 for x in some_list ]
>>> another_list
[2, 3, 4, 5, 6]

Начиная с Python 3.1 (также портированного на Python 2.7), мы можем создавать наборы и словари таким же образом:

>>> # Set Comprehensions
>>> some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]
>>> even_set = { x for x in some_list if x % 2 == 0 }
>>> even_set
set([8, 2, 4])

>>> # Dict Comprehensions
>>> d = { x: x % 2 == 0 for x in range(1, 11) }
>>> d
{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}

В первом примере мы используемsome_listСоздает набор, элементы которого не повторяются, а только четные числа. Во втором примере словаря показано создание словаря с ключами от 1 до 10 (включая 10) и логическим значением, указывающим, является ли ключ четным числом.

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

>>> my_set = {1, 2, 1, 2, 3, 4}
>>> my_set
set([1, 2, 3, 4])

без использования встроенногоsetметод

2. Используйте счетчик для подсчета


Очевидно, но легко забыть. Подсчет — обычная задача программирования, и в большинстве случаев это не так уж сложно. Но считать можно проще.

ПитонcollectionsБиблиотека содержитdictПодкласс , специально предназначенный для решения задач подсчета::

>>> from collections import Counter
>>> c = Counter('hello world')
>>> c
Counter({'l': 3, 'o': 2, ' ': 1, 'e': 1, 'd': 1, 'h': 1, 'r': 1, 'w': 1})
>>> c.most_common(2)
[('l', 3), ('o', 2)]

3. Красивая печать JSON


JSON — отличный формат последовательности, который в наши дни широко используется в API и веб-сервисах, но невооруженным глазом трудно увидеть большие объемы JSON, они длинные и помещаются в одну строку.

можно использовать параметрыindentдля лучшей печати данных JSON, полезных при работе с REPL или ведением журнала:

>>> import json
>>> print(json.dumps(data))  # No indention
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}
>>> print(json.dumps(data, indent=2))  # With indention
{
  "status": "OK",
  "count": 2,
  "results": [
    {
      "age": 27,
      "name": "Oz",
      "lactose_intolerant": true
    },
    {
      "age": 29,
      "name": "Joe",
      "lactose_intolerant": false
    }
  ]
}

Также проверьте встроенные модулиpprint, что может помочь вам красиво вывести другие вещи.

4. Быстро создайте веб-сервис


Иногда нам нужен простой и быстрый способ создания сервисов RPC. Все, что нам нужно, — это способ, с помощью которого программа B могла бы вызвать программу A (возможно, на другой машине).

Нам не нужно знать какие-либо технологии об этом, но нам просто нужно что-то такое же простое, как это, мы можем использовать инструмент под названиемXML-RPCПротокол (соответствующая реализация библиотеки PythonSimpleXMLRPCServer), чтобы справиться с этим.

Вот простой сервер грубого чтения файлов:

from SimpleXMLRPCServer import SimpleXMLRPCServer

def file_reader(file_name):
    with open(file_name, 'r') as f:
        return f.read()

server = SimpleXMLRPCServer(('localhost', 8000))
server.register_introspection_functions()

server.register_function(file_reader)

server.serve_forever()

Клиент, который на него отвечает:

import xmlrpclib
proxy = xmlrpclib.ServerProxy('http://localhost:8000/')
proxy.file_reader('/tmp/secret.txt')

Теперь у нас есть удаленная программа для чтения файлов без каких-либо внешних зависимостей, кроме небольшого кода. (Конечно, небезопасно, поэтому просто используйте это «дома»)

5. Сообщество Python с открытым исходным кодом


Только что я говорил о стандартных библиотеках Python, которые включаются в ваш Python всякий раз, когда вы устанавливаете Python. Для большинства других задач существует множество поддерживаемых сообществом сторонних библиотек.

Вот мой способ выбора библиотеки Python:

  • Включите явное соглашение, чтобы мы могли использовать

  • Активное развитие и поддержка

  • Можно использоватьpipустановить, можно легко повторно развернуть

  • Иметь набор тестов с адекватным покрытием

Если вы найдете библиотеку Python, которая соответствует вашим потребностям, не стесняйтесь, большинство проектов с открытым исходным кодом приветствуют участие в коде и помощь, даже если вы не являетесь ветераном Python. Рука помощи всегда приветствуется!

6. Дополнительные навыки


  • Быстро создать HTTP-сервер в каталоге ::

    python -m SimpleHTTPServer

    В Питоне 3::

    python -m http.server

  • Довольно напечатать JSON в командной строке::

    echo '{"json":"obj"}' | python -mjson.tool

    Кроме того, если вы установилиPygmentsМодуль для печати JSON с подсветкой::

    echo '{"json":"obj"}' | python -mjson.tool | pygmentize -l json

  • Уведомление{}это пустой словарь, а не пустая коллекция

Оригинальная ссылка -овердрафт карты унции.GitHub.IO/improving-has…