Python 我可以将元组添加到生成器吗?

0 投票
3 回答
1501 浏览
提问于 2025-04-17 05:46

我想在前面加上一个空的选项和“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 个回答

1

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。比如说,当你在用某个库的时候,可能会发现它的功能和你想要的不太一样。这时候,你可能会在网上寻找答案,比如在StackOverflow上提问。

在提问之前,最好先检查一下这个库的文档,看看里面有没有你需要的信息。文档通常会详细说明这个库的功能和用法,能帮助你更好地理解它。

如果你还是找不到答案,可以考虑在StackOverflow上提问。在提问的时候,记得描述清楚你遇到的问题,提供一些代码示例,这样其他人才能更好地理解你的问题并给出帮助。

总之,遇到问题时,不要着急,先查文档,再去问别人,通常能更快找到解决办法。

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

你需要用到 itertools.chain() 这个函数。

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

这看起来是对生成器的一个不太好的使用方式。生成器不是一个列表,而是一个可以生成一系列值的函数,所以不可能“把一个元组加到生成器里”。

在模型初始化后,生成器就会被用完。比如说,你可能想在后面再次使用 DAY_CHOICES,但那样就不行了。

如果你没有特别的理由在这里使用生成器,我建议把 DAY_CHOICES 改成一个列表:

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

撰写回答