【问题标题】:Is a lamdba:function() inside the same function considered recursive?同一个函数中的 lambda:function() 是否被认为是递归的?
【发布时间】:2021-10-20 13:30:59
【问题描述】:

我正在看这个如何制作图像查看器的教程:

https://www.youtube.com/watch?v=zg4c92pNFeo&t=1186s

基本上我的问题是这部分代码是否被认为是递归的以及为什么:

def forward(image_number):
    global my_label
    global button_forward
    global button_back

    my_label.grid_forget()
    my_label = tk.Label(image=image_list[image_number-1])
    button_forward = tk.Button(root, text=">>", command=lambda:forward(image_number+1))    #is this recursive?
    button_back = tk.Button(root, text="<<", command=lambda:back(image_number-1))

【问题讨论】:

  • 离题了,但是每次点击都创建一个新按钮是非常糟糕的做法。应该简单地改用button.config(command=...)

标签: python python-3.x tkinter recursion lambda


【解决方案1】:

没有。 forward 不会直接或以其他方式调用自己。它只是创建一个按钮,可以在未来的某个时间调用forward。 (我假设forward 退出而没有实际触发按钮的回调函数。如果它确实,我会认为这是一个灰色区域。)

【讨论】:

  • 如果确实触发了回调,那么它将是mutual recursion
  • 这是一种奇怪的类型,取决于实际调用回调的方式。
  • 不是?是错字吗?
  • 它似乎表现出潜在的递归行为,但如果用户从不触发回调,它确实是非递归的。此外,为了满足数学中的正式定义(可在 Wikipedia 上找到),它需要返回一个或多个不使用递归的终端场景。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 2019-05-08
  • 2013-11-08
相关资源
最近更新 更多