2012-04-26 2 views
0

나는 많은 변수가 있는데 유효성 검사를 위해 설정된 변수의 이름을 얻어야한다. 예를 들어 위의 경우변수의 문자열 리터럴을 얻는 방법

studio = 'Warner Brothers' 
movie = '' 
validation = [studio, movie] 

validation_errors = [] 
for item in validation: 
    if not item: 
     validation_errors.append(name of variable) 

, 나는 결과가 될 싶어하십시오 딕셔너리를 구축하지 않고이 작업을 수행 할 수있는 간단한 방법이

validation_errors = ['movie'] 

있습니까?

+3

[당신의 변수 이름에서 데이터를 보관을 (http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)! – delnan

+1

왜 사전을 만들지 않습니까? 그거 훨씬 더 깨끗해. – FRD

답변

6

자신을 해치지 마십시오. 사전을 사용하십시오. 단순함은 복잡한 것보다 낫습니다.

validation = {'studio': studio, 'movie': movie} 
validation_errors = [] 
for key in validation: 
    if not validation[key]: 
     validation_errors.append(key) 

사전과 같은 로컬 네임 스페이스를 사용하려는 경우 사전을 원할 때가 99 %입니다. 하지 그것을 수행하는 방법의 예로서

0

(또는 어쩌면 그것을하지 말아야 할 이유 데모로),이 코드를 시도 : 단지 일 경우지만,

def nameof(thing): 
    i = id(thing) 
    names = [n for n in globals().keys() if id(globals()[n]) == i] 
    for name in names: 
     if name[0] != '_': 
      return name, names 
    return names[0], names 

그것은 일종의 작동을 당신은 그것을 세계에 넘겨 주거나 그것처럼 보이는 전역에 뭔가를 가지고 있습니다. 또한 문자열 인턴 등으로 인해 모든 종류의 이상한 일치를 반환합니다.

0

파이썬이 당신을 위해 사전을 작성하는지 계산합니까?

studio = 'Warner Brothers' 
movie = '' 
validation = ['studio', 'movie'] 

validation_errors = [] 
for item in validation: 
    if not locals()[item]: 
     validation_errors.append(item) 

그러나 직접 작성하는 것이 좋습니다.

studio = 'Warner Brothers' 
movie = '' 
validation = dict(studio=studio, movie=movie) 

validation_errors = [] 
for var, value in validation.items(): 
    if not value: 
     validation_errors.append(var) 

그리고 당신은 그것에서 함수 만들고 싶어 :

def validate(**vars): 
    errors = [] 
    for var, value in vars.items(): 
     if not value: 
      errors.append(var) 
    return errors 

-->studio = 'Warner Brothers' 
-->movie = '' 
-->print validate(studio=studio, movie=movie) 
['movie'] 
관련 문제