Есть ли способ вызвать функцию "a", которая вызывает next () для итерируемой / выдающей функции "b" - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть 2 функции, как показано:

def num():
  for number in range(1, 5):
    yield number

def config_btn():
  global rad_btn1, rad_btn2, rad_btn3, rad_btn4
  c = next(num())

  temp_entry.config(text=f'{iterate_questions(2)}'),
  # temp_entry.config(state=DISABLED)

  rad_btn1.config(text=f'{iterate_answer_choices(c, 1).title()}', indicatoron=0),

  rad_btn2.config(text=f'{iterate_answer_choices(c, 2).title()}', indicatoron=0),

  rad_btn3.config(text=f'{iterate_answer_choices(c, 3).title()}', indicatoron=0),

  rad_btn4.config(text=f'{iterate_answer_choices(c, 4).title()}', indicatoron=0)

def num () - это функция, которая возвращает числа от 1 до 5 при повторении (я надеюсь), и config_btn использует предыдущую функцию для присвоения номера "c". «c» затем передается другой функции. Есть ли способ, которым я могу вызвать config_btn из-за пределов этих функций, чтобы "c" изменился на следующий номер и перейти к остальной части функции?

Я попытался изменить config_btn для принятия номера и прошло

1 Ответ

0 голосов
/ 12 апреля 2020

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

def num():
  for number in range(1, 5):
    yield number

c = num()

def config_btn():
  global rad_btn1, rad_btn2, rad_btn3, rad_btn4, c
  next(c)

  temp_entry.config(text=f'{iterate_questions(2)}'),
  # temp_entry.config(state=DISABLED)

  rad_btn1.config(text=f'{iterate_answer_choices(c, 1).title()}', indicatoron=0),

  rad_btn2.config(text=f'{iterate_answer_choices(c, 2).title()}', indicatoron=0),

  rad_btn3.config(text=f'{iterate_answer_choices(c, 3).title()}', indicatoron=0),

  rad_btn4.config(text=f'{iterate_answer_choices(c, 4).title()}', indicatoron=0)

Однако она не выглядит чистой. Должен быть лучший способ.
Тогда вы должны обработать ошибку StopIteration, возникающую на 5-й итерации, если она зашла так далеко.

...