为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2021-03-30 21:15:59
我想知道如何正确使用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值),但两者都是错误的,因为它需要执行你能启发我吗?如何确保执行了回调?我该如何传递它呢?
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

在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可能看起来有点奇怪()(),但是如果您考虑一会儿,这是很有意义的。


查看完整回答
反对 回复 2021-04-01
?
千巷猫影

TA贡献1829条经验 获得超7个赞

如果执行它,这很简单。

member_of()将返回方法对象检查。您必须执行以下操作才能获得结果member_of('admin')()

k=member_of('admin')
if k():

做你的任务。


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信