Python Могу ли я добавить кортеж в генератор? - PullRequest
0 голосов
/ 07 ноября 2011

Я хочу добавить ('', 'Day') на передний план. Прямо сейчас он делает выпадающее меню для номеров от 1 до 31, и я хочу выбрать «День» вверху.

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 ]

6 голосов
/ 07 ноября 2011

Вы хотите itertools.chain().

for i in itertools.chain(('foo', 'bar'), xrange(1, 4)):
  print i
1 голос
/ 07 ноября 2011

Это похоже на плохое использование генераторов.Генератор - это не список, это функция, которая генерирует последовательность значений, поэтому «добавить кортеж к генератору» невозможно.

Генератор будет исчерпан после инициализации модели.Например, вы можете захотеть снова использовать DAY_CHOICES позже - что будет невозможно.

Если у вас нет особых причин использовать генератор здесь, я бы рекомендовал вместо этого включить DAY_CHOICES в список:

DAY_CHOICES = [('', 'Day')] + [(str(x), x) for x in range(1,32)]
1 голос
/ 07 ноября 2011
DAY_CHOICES = ( (str(x),x) if x>0 else('','Day') for x in range(0,32) )
...