Рубрики
Без рубрики

Сделайте программу Python очень настраиваемой

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

Более сложная программа является, тем больше параметров он имеет тенденцию принимать, чтобы настроить его поведение. Настраиваемая программа проще адаптироваться к потребностям пользователя (и ваш собственный) и уменьшает объем кода, который вы должны изменить, если вы хотите изменить определенные вещи.

Существует три способа указать параметры в вашем коде:

  1. Непосредственно в Исходный код Отказ
  2. Внутри отдельной Файл конфигурации Отказ
  3. С аргументами из командная строка Отказ

Каждый должен переопределить параметры предыдущего. Как мы реализуем это чистым способом?

1. Получить все параметры отдельно

Из исходного кода

Это не требует объяснения. Конфигурация по умолчанию жестко закодирована.

default_config = {
    "mode": "demo",
    "timeout": 5,
    "color": blue,
    "language": "en"
}

Из файла конфигурации

Существуют бесчисленные способы прочтения файла конфигурации, из пользовательской функции анализа в библиотеку, как ConfigParser Отказ Очевидно, что ваш выбор будет определять формат файла, и у каждого есть свои плюсы и минусы.

Чтобы сохранить это просто, я буду использовать обычный файл JSON:

import json

with open("config.json", "r") as f:
    file_config = json.load(f)

Из командной строки

Опять же, есть несколько способов анализа аргументов из командной строки. Я думаю, что самая продленная – argparse. Поскольку это гибко и реализует непосредственно множество обычно ожидаемого поведения, как автогенерированная справочная помощь и многое другое.

Тем не менее, это делает код слишком длинным для примера, подобного этому, поэтому я использую пользовательский кусок кода для разбора аргументов с формой --key = значение Отказ

import sys

params = filter(lambda x: x[:2] == "--", sys.argv)
params = map(lambda x: x.split(), params)
cli_config = {k[2:]: v for [k,v] in params}

2. Определить значения, присутствующие на более низких уровнях

В Python оператор Double Star ( ** ) используется для распыления словарей. Он извлекает пары клавишных значений, которые можно использовать в другом месте.

Одним из самых интересных применений этого оператора является Словари слияния Строительство нового от других распакованных. Поскольку они разрешают только уникальные ключевые ключи, словари, распакованные справа, заменяют значения, повторяемые слева.

final_config = {**default_config, **file_config, **cli_config}

Пример

Давайте собрали то, что у нас есть:

main.py

import sys
import json

## default
default_config = {
    "mode": "demo",
    "timeout": 5,
    "color": "blue",
    "language": "en"
}

print("default", default_config)

## file
with open("config.json", "r") as f:
    file_config = json.load(f)

print("file   ", file_config)

## command line
params = filter(lambda x: x[:2] == "--", sys.argv)
params = map(lambda x: x.split(), params)
cli_config = {k[2:]: v for [k,v] in params}

print("cli    ", cli_config)

## merge them
final_config = {**default_config, **file_config, **cli_config}

print("final  ", final_config)

config.json.

{
    "color": "red",
    "timeout": 10
}

Выход

$ python main.py --color=green --language=es
default {'mode': 'demo', 'timeout': 5, 'color': 'blue', 'language': 'en'}
file    {'color': 'red', 'timeout': 10}
cli     {'color': 'green', 'language': 'es'}
final   {'mode': 'demo', 'timeout': 10, 'color': 'green', 'language': 'es'}

Заключение

Создание ваших программ настраиваемым, сделает много вашу работу проще. Позволяя пользователям (и себя как разработчику) настроить части вашего приложения, не модифицируя исходный код как на постоянном, так и динамический способ, всегда имеет значение.

Рекомендуемое чтение

Как сделать этический гусеник в Python

Miguelmj · 27 декабря 27 · 4 мин прочитаны

Я сделал систему рекомендации для переполнения стека без ответов

Miguelmj · 15 января · 1 мин прочитан

Вы можете следовать за мной в Twitter! 🐦

Оригинал: “https://dev.to/miguelmj/make-your-python-program-highly-configurable-3blk”