以下代码中的following参数的用途是什么?

时间:2018-12-18 01:34:13

标签: python

我正在学习来自Java背景的python。对于初学者,我正在Coursera上进行。在解决练习题时,我遇到了这个特定的代码

import simplegui

message = "Welcome!"

# Handler for mouse click
def click():
    global message
    message = "Good job!"

# Handler to draw on canvas
def draw(canvas):
    canvas.draw_text(message, [50,112], 36, "Red")

# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Home", 300, 200)
frame.add_button("Click me", click)
frame.set_draw_handler(draw)

# Start the frame animation
frame.start()

现在我的问题是关于这种特定方法

 def draw(canvas):
    canvas.draw_text(message, [50,112], 36, "Red")

在此方法中,为什么我确实需要使用该特定参数'canvas'。为什么我不能像

这样简单
 def draw():
    canvas.draw_text(message, [50,112], 36, "Red")

因为当您从何处调用此方法时

frame.set_draw_handler(draw)

我无论如何都没有传递任何参数。因此参数类型不存在。还是当我从方法set_draw_handler()调用它时。编译器会自动假定它为canvas类型。

谢谢 :)

1 个答案:

答案 0 :(得分:3)

您没有传递对draw函数的调用,而是传递了函数本身。这是一个回调:给库提供一个函数,然后库在需要执行某些操作时调用它(在这种情况下,当它需要重绘窗口时)。为了使您的回调能够正常工作,它需要从库中以canvas参数的形式进行输入,因此库在调用函数时会将其传入。