gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:56:02 26 4
gpt4 key购买 nike

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

我的代码中有一些来自 Cherrypy 身份验证示例的回调函数。

(这些回调返回一个函数,该函数可以评估为 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 值)但两者都是错误的,因为它需要被执行

你能给我解释一下吗?如何确保执行回调?我怎样才能按原样传递它?

最佳答案

在 python 中,就像在许多其他语言中一样,一个变量也可以包含一个函数,您可以像其他包含例如函数的变量一样传递它们。数字或字符串。

CherryPy 的 member_of 函数本身确实在您的示例中返回了一个函数。

我用简单的步骤来解释它:

如果您编写 member_of(),它会返回函数 member_of() 的结果,在本例中,该函数的名称为 check

cb_function = member_of('admin')

此时变量cb_function保存调用函数member_of的结果,最后一行member_of返回check ,它在函数 member_of 中被定义为另一个函数!

您必须再次调用第一个结果,因为您可以而且必须以几乎与您在当前上下文中定义的局部函数相同的方式对待它,以获得最终结果,方法如下:

my_result =  cb_function()

然后您将继续并使用结果。例如,您可以检查其 bool 值:

if my_result:
# do something
...

上面的 3 个步骤可以写得更短:

cb_function = member_of('admin')
if cb_function():
# do something
...

或者更短:

if member_of('admin')():
# do something
...

起初,在 python 中使用双 ()() 可能会显得有点奇怪,但如果你仔细考虑一下,它是有道理的。

关于python - 如何在python中使用回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17081243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com