Я программирую на 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…