Python我可以在生成器中添加元组吗?

时间:2011-11-07 05:40:41

标签: python django forms tuples generator

我想在前面添加('','Day')。现在它为1到31的数字做了一个下拉菜单,我想在顶部选择'Day'。

DAY_CHOICES = (
    # I was hoping this would work but apparently generators don't work like this.
    # ('', 'Day'),
    (str(x), x) for x in range(1,32)
)

# I'll include this in the snippet in case there's some voodoo I can do here
from django import forms
class SignUpForm(forms.Form):
    day = forms.ChoiceField(choices=DAY_CHOICES)

3 个答案:

答案 0 :(得分:6)

你想要itertools.chain()

for i in itertools.chain(('foo', 'bar'), xrange(1, 4)):
  print i

答案 1 :(得分:1)

DAY_CHOICES = ( (str(x),x) if x>0 else('','Day') for x in range(0,32) )

答案 2 :(得分:1)

这似乎是对发电机的糟糕使用。生成器不是列表,它是一个生成一系列值的函数,因此无法“将元组添加到生成器”。

模型初始化后,生成器将耗尽。例如,您可能希望稍后再次使用DAY_CHOICES - 这是不可能的。

如果您没有在此处使用生成器的任何非常具体的原因,我建议将DAY_CHOICES转换为列表:

DAY_CHOICES = [('', 'Day')] + [(str(x), x) for x in range(1,32)]