2014-04-13 204 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)]