如何在python中使用回调函数?

我想知道如何正确使用python 2.7回调函数。


我的代码中有来自Cherrypy auth示例的一些回调函数。


(这些回调函数返回的值可以评估为True或False,这取决于登录的用户是否在组中。)


我不知道是否执行了回调,是否编写了如下代码:


给定库中的定义是:


def member_of(groupname):

    def check():

        if groupname == 'admin':

          if cherrypy.request.login == 'joe':

            return True

          if cherrypy.request.login == 'toni':

            return True

          return False

        return False

        # .... (other groups checked in the same way)

    return check # returns a callback function from my understanding?

如何在代码中应用和执行回调?


如果我这样说:


 if member_of('admin'):

    do_something()

  else:

    do_something_else()

这将执行回叫并检查管理员组吗?还是会找出“ member_of”的值是否是一个函数定义,而一个函数定义可能始终是“ True”值(或者可能是False值),但两者都是错误的,因为它需要执行


你能启发我吗?如何确保执行了回调?我该如何传递它呢?


紫衣仙女
浏览 168回答 2
2回答

侃侃无极

在python中,就像许多其他语言一样,变量也可以包含一个函数,您可以像包含数字或字符串的其他变量一样将它们传递给其他对象。CherryPy的member_of函数本身在您的示例中确实返回了一个函数。我通过简单的步骤对其进行解释:如果您编写member_of()它,则返回函数member_of()的结果,check在这种情况下,该函数的名称为该函数。cb_function = member_of('admin')此时,变量cb_function保存调用函数的结果member_of,并在最后一行member_ofreturn中check,它在函数内定义member_of为另一个函数!您必须再次调用第一个结果,因为您可以并且必须以与在当前上下文中定义的局部函数几乎相同的方式来对待它,以通过以下操作获得最终结果:my_result =  cb_function()然后,您将继续使用结果。例如,您可以检查其布尔值:if my_result:  # do something  ...   上面的3个步骤可以写得更短:cb_function = member_of('admin')  if cb_function():    # do something    ...甚至更短:if member_of('admin')():  # do something  ...  起初,在python中拥有double可能看起来有点奇怪()(),但是如果您考虑一会儿,这是很有意义的。

千巷猫影

如果执行它,这很简单。member_of()将返回方法对象检查。您必须执行以下操作才能获得结果member_of('admin')():k=member_of('admin') if k():做你的任务。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python