2014-04-13 38 views
0

我收集了很多表單參數。而不是寫這樣的重複行:使用字符串作爲變量名

def post(self): 
    var1 = self.request.get('var1') 
    var2 = self.request.get('var2') 
    var3 = self.request.get('var3') 
    var4 = self.request.get('var4') 
     ... 

...有沒有辦法把它放到循環?也許是這樣的:

def post(self): 
    var_list = ['var1', 'var2', 'var3', 'var4', ...] 
    for var in var_list: 
     var = self.request.get(var) 

與我的循環的問題是,VAR是一個字符串,我需要它實際上是在最後一行的變量名。我怎麼能這樣做?

回答

1

你寫什麼都可以工作,但要覆蓋在分配的價值,因爲你重複var。相反,收集在一個列表中的結果:

def post(self): 
    var_list = ['var1', 'var2'] 
    result_list = [] 
    for var in var_list: 
     result_list.append(self.request.get(var)) 
    return result_list # etc. 

您還可以通過使用列表理解簡化它:

def post(self): 
    return [self.request.get(var) for var in ['var1', 'var2']] 
+1

或者,他們可以把它放在'dict'中。 – SethMMorton

+0

@SethMMorton'request.get'似乎已經是一個類似於dict的對象,所以不確定那會是什麼意思。 –

0

爲什麼不使用一個列表,而不是:

def post(self): 
    vars_list = [] 
    var_list = ['var'+str(i) for i in range(1,10)] 
    for var in var_list: 
     vars_list.append(self.request.get(var)) 
+0

您正在覆蓋內建的'vars()' – msvalkon

+1

@msvalkon,謝謝。我已經更新了我的答案。 – sshashank124

0

定義MAX_VAR_NUM和使用以下命令:

MAX_VAR_NUM=1000 
var = [self.request.get("var"+str(i)) for i in xrange(1,MAX_VAR_NUM)] 

你可以添加MAX_VAR_NUM作爲對象實例的屬性:

var = [self.request.get("var"+str(i)) for i in xrange(1,self.max_var_num)]