2012-04-26 48 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 2012-04-26 19:31:24

+1

爲什麼不建立字典?那會更清潔。 – FRD 2012-04-26 19:32:21

回答

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

如果Python爲您構建字典,它會計算嗎?

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'] 
相關問題