사전을 JSON 형식의 파일에 저장하고 함수 이름을 일반 문자열로 저장하십시오. 데모 JSON 파일을로드하는 방법 :
이
{"somestring":"myfunction"}
코드 :
import json
d = json.load(open('very_small_dic.txt', 'r'))
print(d) # {'somestring': 'myfunction'}
문자열을 얻을 방법 : 함수 맵핑을 :
먼저 당신이로드 샘플 파일의
콘텐츠 위의 코드에서 설명한대로 파일에서 사전을 선택하십시오. 그런 다음 함수 이름의 문자열이 실제 함수로 바뀌는 새 사전을 작성합니다. 데모 :
def myfunction(x):
return 2*x
d = {'somestring': 'myfunction'} # in the real code this came from json.load
d = {k:globals()[v] for k,v in d.items()}
print(d) # {'somestring': <function myfunction at 0x7f36e69d8c20>}
print(d['somestring'](42)) # 84
또한 별도의 파일 myfunctions.py
에 기능을 저장하고 getattr
를 사용할 수 있습니다. 이것은 아마도 globals
을 사용하는 것보다 더 깔끔한 방법 일 것입니다.
import myfunctions # for this demo, this module only contains the function myfunction
d = {'somestring': 'myfunction'} # in the real code this came from json.load
d = {k:getattr(myfunctions,v) for k,v in d.items()}
print(d) # {'somestring': <function myfunction at 0x7f36e69d8c20>}
print(d['somestring'](42)) # 84
귀하의 질문을 이해할 수 있는지 잘 모르겠습니다. 코드에 문자열 리터럴로 가득 찬 거대한 사전을 갖고 싶지 않으십니까? 그렇다면, 내 생각은 사전을 JSON 형식으로 파일에 저장하고 프로그램 실행시 파일을 읽는 것입니다. – timgeb
사용자 입력이 전혀 형식화되지 않은 경우 pyparsing 라이브러리를 살펴보십시오. 그 외의 경우 JSON으로 저장하고 실행시 변수로 읽는 것에 동의합니다. – GleasonK
@ paul23 : 작은 사전 샘플을 보는 것도 도움이 될 것입니다. – mtik00