한 가지 방법이 있습니다. 나는 그것이 취하기 때문에 중요한 것에 대해서는 이것을 권장하지 않을 것입니다. 그러나 할 수 있습니다.
inspect
모듈을 사용하여 호출 한 소스 코드를 찾는 함수를 작성하십시오 . 그런 다음 소스 코드를 구문 분석하여 검색하려는 변수 이름을 식별 할 수 있습니다. 예를 들어 autodict
다음은 변수 목록을 가져 와서 변수 이름에 대한 사전 매핑 변수 이름을 반환하는 함수입니다. 예 :
x = 'foo'
y = 'bar'
d = autodict(x, y)
print d
줄 것이다 :
{'x': 'foo', 'y': 'bar'}
소스 코드 자체를 검사하는 것은 통해 검색하는 것보다 더 나은 locals()
또는 globals()
후자의 방법은 당신에게하지 않기 때문에 어떤 변수 당신이 원하는 사람입니다.
여하튼, 코드는 다음과 같습니다.
def autodict(*args):
get_rid_of = ['autodict(', ',', ')', '\n']
calling_code = inspect.getouterframes(inspect.currentframe())[1][4][0]
calling_code = calling_code[calling_code.index('autodict'):]
for garbage in get_rid_of:
calling_code = calling_code.replace(garbage, '')
var_names, var_values = calling_code.split(), args
dyn_dict = {var_name: var_value for var_name, var_value in
zip(var_names, var_values)}
return dyn_dict
작업은으로 줄 inspect.getouterframes
을 이루어 호출 된 코드 내의 문자열을 반환합니다 autodict
.
이런 종류의 마술의 명백한 단점은 소스 코드가 어떻게 구성되는지에 대한 가정을한다는 것입니다. 물론 통역사 내부에서 실행되면 전혀 작동하지 않습니다.
pip3 install python-varname==0.1.5
; 다음을 사용하여 가져from varname import nameof