Для проекта, над которым я сейчас работаю, использующего Python и C ++ (через SWIG), я планирую использовать короткий скрипт Python в качестве входного файла. Так что, в некотором смысле, я буду «взламывать источник» для изменения параметров, но на интерпретируемом языке, а не на скомпилированном.
В настоящее время я планирую иметь входной файл типа parameters.py
и использовать его как from parameters import params
. Но это может быть слишком зависит от правильного синтаксиса.
params = {
"foods" : ["spam", "beans", "eggs"],
"costs" : [199, 4, 1],
"customerAge" : 23,
}
Другой вариант может состоять в том, чтобы просто определить переменные на уровне скрипта в parameters2.py
. Это теряет красивую упаковку словаря, но делает его немного более сложным для пользователя. И, вероятно, было бы нетрудно написать «парсер», который помещает эти переменные уровня скрипта в хороший словарь. Плюсом метода является то, что пользователь может параметризовать вещи, которые изначально не рассматривались - from parameters2 import *
перезапишет предыдущие определения этих параметров. Конечно, это может быть плохо, если пользователь перезаписывает что-то важное.
foods = ["spam", "beans", "eggs"]
costs = [199, 4, 1]
customerAge = 23
parameters3.py
будет использовать класс, хотя это противопоказано проницательностью Python по поводу отступов. from parameters3 import params
class params:
foods = ["spam", "beans", "eggs"]
costs = [199, 4, 1]
customerAge = 23
Для полноты картины также следует отметить, что наш код C ++ также определяет класс параметров. То есть в нашем реальном проекте файл parameters.py является оболочкой SWIG для соответствующего класса C ++. Вы бы использовали как from parameters4 import params
. Однако это позволяет использовать только те параметры, которые уже объявлены в классе C ++.
import parameters
params = parameters.Parameters()
params.foods = ["spam", "beans", "eggs"]
params.costs = [199, 4, 1]
params.customerAge = 23