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

装饰器分配

装饰器分配

侃侃无极 2022-08-02 10:33:57
假设装饰器@app.callback(    Output("plot_1", "figure"),    [Input("checklist", "value"),     Input("radio", "value")])这在代码中重复了几次。副本之间的唯一区别是不同的绘图名称。如何将该装饰器分配给另一个装饰器并使用后者?@new_callback("plot_1")
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

装饰器语法只是函数应用的快捷方式; 只是一个函数。创建一个使用固定参数调用它的新函数。app.callback


def new_callback(plot):

    return app.callback(

          Output(plot, "figure"),

          [

              Input("checklist", "value"),

              Input("radio", "value")

          ]

    )

app.callback本身实际上不是装饰者;它是一个返回装饰器的函数(即,将要修饰的函数作为参数的函数)。


@app.callback(...)

def foo():

    ...

等效于


def foo():

    ...


foo = app.callback(...)(foo)


查看完整回答
反对 回复 2022-08-02
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您可以将装饰器包装在其自己的装饰器中,并使用您在任何子函数中传递的参数,如下所示:


def decorator_wrapper(arg1):


    # do something with arg1:

    print('Inside decorator_wrapper, arg1: ' + str(arg1))


    def decorator(function):


        print('Inside decorator, arg1: ' + str(arg1))


        def wrapper(*args, **kwargs):


            print('Inside wrapper, arg1: ' + str(arg1))


            # execute decorated function: 

            result = function(*args, **kwargs)


            return result


        return wrapper


    return decorator



@decorator_wrapper('a')

def MyFunction():


    print('This is my function')



MyFunction()

这将导致:


Inside decorator_wrapper, arg1: a

Inside decorator, arg1: a

Inside wrapper, arg1: a

This is my function

更多这里: https://www.geeksforgeeks.org/decorators-with-parameters-in-python/


查看完整回答
反对 回复 2022-08-02
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号