How to use a callback function in python?

后端 未结 2 607
谎友^
谎友^ 2021-01-17 10:09

I wonder how to correctly use python 2.7 callback functions.

I have some callback functions from Cherrypy auth examples in my code.

(These callbacks return

相关标签:
2条回答
  • 2021-01-17 10:09

    If you execute it, it is plain simple.

    member_of() will return method object check. you have to execute to get result by doing something like if member_of('admin')(): or,

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

    To do your task.

    0 讨论(0)
  • 2021-01-17 10:20

    In python, like in many other languages, a variable can also contain a function and you can pass them around like other variables that contain e.g. numbers or strings.

    CherryPy's member_of function itself does return a function in your example.

    I am explaining it in simple steps:

    If you write member_of() it returns the result of the function member_of() which is the function with the name check in this case.

    cb_function = member_of('admin')
    

    At this point the variable cb_function holds the result of calling the function member_of, and in the last line member_of returns check, which was defined within the function member_of as another function!

    You have to call the first result again, because you can and you have to treat it in almost the same way as a local function, that you defined in the current context, to get the final result, by doing something like:

    my_result =  cb_function()
    

    And then you would continue and use the result. For example you could check its boolean value:

    if my_result:
      # do something
      ...   
    

    The 3 steps from above together can be written shorter:

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

    Or even shorter:

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

    At first it may appear a little strange in python to have the double ()(), but if you think about it for a while it makes sense.

    0 讨论(0)
提交回复
热议问题