#python #python-3.x #tkinter #recursion #lambda
Вопрос:
Я смотрел этот учебник о том, как сделать средство просмотра изображений:
В основном мой вопрос заключается в том, считается ли эта часть кода рекурсивной или нет, и почему:
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))
Комментарии:
1. Не по теме, но это действительно плохая практика-создавать новую кнопку при каждом щелчке, накладывая ее друг на друга. Следует просто сделать
button.config(command=...)
это вместо этого.
Ответ №1:
Нет. forward
не называет себя, прямо или иначе. Он просто создает кнопку, которая может позвонить forward
в какой-то момент в будущем. (Я предполагаю, что forward
завершается без фактического запуска функции обратного вызова кнопки. Если бы это было так, я бы счел это чем-то вроде серой зоны.)
Комментарии:
1. Если бы это вызвало обратный вызов, то это была бы взаимная рекурсия
2. Это странный вид, в зависимости от того, что на самом деле вызывает обратный вызов.
3. не так ли ? это опечатка?
4. Похоже, что он демонстрирует потенциально рекурсивное поведение , но на самом деле он нерекурсивен, если пользователь никогда не запускает обратный вызов. Кроме того, чтобы соответствовать формальному определению в математике (найденному в Википедии), потребуется вернуть один или несколько терминальных сценариев, которые не используют рекурсию.