【问题标题】:Is there a way to call function "a" which calls next() on the iterable/yielding function "b"有没有办法调用函数“a”,它在可迭代/产生函数“b”上调用 next()
【发布时间】:2020-07-24 16:24:47
【问题描述】:

如图所示,我有 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 来接受一个数字并通过了

【问题讨论】:

  • num() 中产生的值是 1,2,3,4
  • 是....但是当我调用 config_btn 函数时,它一直将 1 分配给“c”,所以不确定是什么阻止它获取下一个数字 (2) 并将其分配给“c”
  • 因为你一直打电话给num()
  • num 返回一个产生连续值的 objectnext(num()) 创建该对象,将其传递给num,然后丢弃该对象。 n = num(); next(n); next(n); # etc.
  • def config_btn(c):, ...., config_btn(next(num()))

标签: python user-interface tkinter ttk


【解决方案1】:

如果其他全局变量不打扰您,您可以这样做:

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)

但它看起来并不干净。一定有更好的方法。
然后你必须处理第 5 次迭代时抛出的 StopIteration 错误,如果它到目前为止。

【讨论】:

  • 天哪……谢谢!!我已经好几个月没碰过发电机了,完全忘记了这一点。你是对的,它绝对不干净,我也需要一个不那么干净的 try/catch 语句。几天来,我一直在为一个班级项目停留在这一步。现在我可以继续前进并稍后清理。谢谢,伙计!
  • 酷 :) 然后继续
猜你喜欢
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2012-02-17
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多