Python 프로그램을 고도로 구성 가능하게 만드십시오.
코드에서 매개변수를 지정하는 세 가지 방법이 있습니다.
각각은 이전 매개변수를 재정의해야 합니다. 이것을 어떻게 깔끔하게 구현합니까?
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=value
형식의 인수를 구문 분석하겠습니다.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에서 이중 별표(
**
) 연산자는 사전의 압축을 푸는 데 사용됩니다. 다른 곳에서 사용할 키-값 쌍을 추출합니다.이 연산자의 가장 흥미로운 용도 중 하나는 사전을 병합하여 압축 해제된 다른 사전에서 새 사전을 빌드하는 것입니다. 고유한 키만 허용하므로 오른쪽에서 압축을 푼 사전이 왼쪽에서 반복되는 값을 대체합니다.
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 ・ 2020년 12월 27일 ・ 4분 읽기
#python
#tutorial
#webscraping
#web
Stack Overflow 미답변 질문에 대한 추천 시스템을 만들었습니다.
MiguelMJ ・ 1월 15 '21 ・ 1 분 읽기
#showdev
#python
#project
Reference
이 문제에 관하여(Python 프로그램을 고도로 구성 가능하게 만드십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/miguelmj/make-your-python-program-highly-configurable-3blk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)