代码之家  ›  专栏  ›  技术社区  ›  Pritish

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

  •  1
  • Pritish  · 技术社区  · 6 年前

    我正在学习Python,来自Java背景。首先,我是在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 回复  |  直到 6 年前
        1
  •  3
  •   manveti    6 年前

    您不会传入对draw函数的调用,而是传入函数本身。这是一个回调:向库提供一个函数,当库需要执行某些操作时(在本例中,当它需要重新绘制窗口时),库将调用它。为了使回调能够工作,需要从库中以 canvas 参数,因此库在调用函数时将其传入。