为啥在烧瓶中没有调用函数时会有一些打印? [复制]

Posted

技术标签:

【中文标题】为啥在烧瓶中没有调用函数时会有一些打印? [复制]【英文标题】:Why there are some print when the functin is not called in flask? [duplicate]为什么在烧瓶中没有调用函数时会有一些打印? [复制] 【发布时间】:2019-03-20 23:23:08 【问题描述】:

flask中的以下代码(伪代码)让我很困惑。

def IsIllegal(f):
    @wraps(f)
    def decorated(*args,**kwargs):
        if True:
            return error msg
        else:
            return f(*args,**kwargs)
    return decorated

@IsIllegal
@app.route(...,  methods = ['POST']  )
def func1():
    data = flask.request.get_data()
    print(data)
    ...

其中函数IsIllegal用于检查用户是否未登录。我发现func1即使用户未登录也总是打印数据。func1的返回值正如预期的那样被函数停止是非法的。但我觉得它没有保存,因为 func1 中的语句被执行(打印)。我怎么能理解这个?

【问题讨论】:

你能确定你发布的是有效的Python吗? return error msg 无效。 【参考方案1】:

您注册了 未修饰 func1() 函数。 @IsIllegal() 装饰器结果是在@app.route() 装饰器注册后应用的,并且在访问路由时永远不会调用。

装饰器的应用顺序相反,可以说是从内到外。反转装饰器:

@app.route(...,  methods = ['POST']  )
@IsIllegal
def func1():

现在IsIllegal(func1)的结果被@app.route(...)注册了,所以访问路由最终会调用decorated()

【讨论】:

以上是关于为啥在烧瓶中没有调用函数时会有一些打印? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我调用一次时会打印无限值?

在 Python 中,为啥为没有定义超类的类调用 super() 函数不是错误? [复制]

为啥箭头函数没有参数数组? [复制]

为啥我的画布在将 html 转换为 DOM 调用时会自行缩放? [复制]

为啥我的链表内容在退出函数时会消失?

为啥这个函数调用后数组会改变? [复制]