python에서 변수 이름을 어떻게 인쇄할 수 있습니까?
이름이 지정된 변수가 있다고 가정합니다.choice
그것은 2와 같습니다.변수 이름에 액세스하려면 어떻게 해야 합니까? 한 등 와 것에 해당하는 것.
In [53]: namestr(choice)
Out[53]: 'choice'
사전을 만드는 데 사용하기 위해.이것을 할 수 있는 좋은 방법이 있는데 저는 그것을 놓치고 있습니다.
편집:
그 이유는 이러합니다.저는 런타임에 수정하거나 수정하지 않고 여러 매개 변수를 사용하여 프로그램을 호출하는 데이터 분석 작업을 수행하고 있습니다.마지막 실행에서 사용한 매개 변수를 .config 파일에서 읽었습니다.
filename
no_sig_resonance.dat
mass_peak
700
choice
1,2,3
값을 입력하라는 메시지가 표시되면 이전에 사용한 값이 표시되고 빈 문자열 입력이 이전에 사용한 값을 사용합니다.
제 질문은 이러한 값들이 스캔된 사전을 작성할 때 발생하기 때문입니다.가 필요하면 는 매개변필실행니다합면하를 합니다.get_param
파일에 액세스하여 매개 변수를 찾습니다.
저는 그것을 읽음으로써 그 문제를 모두 피할 것이라고 생각합니다.config
한 번 파일을 작성하고 그것으로부터 사전을 만듭니다.나는 원래... ▁i▁reasons다▁remember니▁no. 이유는 더 이상 기억나지 내가 더 이상 기억하지 못하는 이유들.내 코드를 업데이트하기에 완벽한 상황!
굳이 말하자면, 여기 끔찍한 검사 기반의 해결책이 있습니다.
import inspect, re
def varname(p):
for line in inspect.getframeinfo(inspect.currentframe().f_back)[3]:
m = re.search(r'\bvarname\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)', line)
if m:
return m.group(1)
if __name__ == '__main__':
spam = 42
print varname(spam)
저는 그것이 여러분이 가지고 있는 문제를 재평가하고 다른 접근법을 찾도록 영감을 주기를 바랍니다.
원래 질문에 답하기
def namestr(obj, namespace):
return [name for name in namespace if namespace[name] is obj]
예:
>>> a = 'some var'
>>> namestr(a, globals())
['a']
@rbright가 이미 지적했듯이 당신이 무엇을 하든 그것을 하는 더 나은 방법이 있을 것입니다.
만약 여러분이 이것을 하려고 한다면, 그것은 여러분이 무언가 잘못하고 있다는 것을 의미합니다.사용을 고려해 보십시오.dict
대신.
def show_val(vals, name):
print "Name:", name, "val:", vals[name]
vals = {'a': 1, 'b': 2}
show_val(vals, 'b')
출력:
Name: b val: 2
구체적인 해결책에 대한 자세한 내용을 묻는 것보다, 당면한 문제를 설명하는 것이 좋습니다. 더 나은 답변을 얻을 수 있을 것이라고 생각합니다.당신이 하려는 일이 무엇이든 할 수 있는 더 나은 방법이 거의 확실히 있기 때문에 저는 이렇게 말합니다.이러한 방식으로 변수 이름에 액세스하는 것은 일반적으로 모든 언어의 문제를 해결하는 데 필요하지 않습니다.
즉, 모든 변수 이름은 이미 사전에 있으며 기본 제공 함수 로컬 및 전역을 통해 액세스할 수 있습니다.검사 중인 스코프에 맞는 것을 사용합니다.
이러한 사전을 검사하는 몇 가지 일반적인 관용구 중 하나는 쉬운 문자열 보간입니다.
>>> first = 'John'
>>> last = 'Doe'
>>> print '%(first)s %(last)s' % globals()
John Doe
이런 종류의 것은 이름으로 변수를 검사해야 함에도 불구하고 대안보다 조금 더 읽기 쉬운 경향이 있습니다.
Python에는 변수가 없고 이름만 있기 때문에 불가능합니다.
예:
> a = [1,2,3]
> b = a
> a is b
True
이제 이 두 가지 중 어느 것이 올바른 변수입니까?사이에 차이는 없습니다.a
그리고.b
.
전에도 비슷한 질문이 있었습니다.
이와 같은 것이 당신에게 효과가 있습니까?
>>> def namestr(**kwargs):
... for k,v in kwargs.items():
... print "%s = %s" % (k, repr(v))
...
>>> namestr(a=1, b=2)
a = 1
b = 2
예를 들어 다음과 같습니다.
>>> choice = {'key': 24; 'data': None}
>>> namestr(choice=choice)
choice = {'data': None, 'key': 24}
>>> printvars(**globals())
__builtins__ = <module '__builtin__' (built-in)>
__name__ = '__main__'
__doc__ = None
namestr = <function namestr at 0xb7d8ec34>
choice = {'data': None, 'key': 24}
열심히 평가하면 변수를 볼 때마다 기본적으로 값으로 변합니다.즉, Python에는 네임스페이스가 내장되어 있습니다.예를 들어, local()은 함수의 변수 이름을 값에 매핑하는 사전을 반환하고 global()은 모듈에 대해 동일한 사전을 반환합니다.따라서:
for name, value in globals().items():
if value is unknown_variable:
... do something with name
로컬() 및 전역()에 액세스하기 위해 아무것도 가져올 필요가 없습니다.
또한 값에 대한 별칭이 여러 개인 경우 네임스페이스를 반복하면 첫 번째 별칭만 찾습니다.
구성 매개 변수를 읽는 방법에 대한 수정된 질문의 경우 시간과 노력을 절약하고 ConfigParser 또는 (내가 선호하는 도구) ConfigObj를 사용하는 것이 좋습니다.
그것들은 여러분이 필요로 하는 모든 것을 할 수 있고, 사용하기 쉬우며, 다른 누군가는 그것들이 제대로 작동하도록 하는 방법에 대해 이미 걱정했습니다!
언급URL : https://stackoverflow.com/questions/592746/how-can-you-print-a-variable-name-in-python
'programing' 카테고리의 다른 글
어레이가 비어 있는지 null인지 확인합니다. (0) | 2023.08.23 |
---|---|
이전에 로드된 모든 PowerShell 변수 나열 (0) | 2023.08.23 |
테스트/QA 프로세스와 통합된 Git 분기 전략 (0) | 2023.08.23 |
'both added' 병합 충돌을 해결하시겠습니까? (0) | 2023.08.23 |
NHNibernate는 무엇입니까? (0) | 2023.08.23 |