Python 爬阶梯 | 语法糖是什么玩意?Python中的函数高级用法——装饰器

通过前面的一些讲解,相信你对 Python 的函数用法有一个大致的认识了,我们知道, Python 中的函数可以被当做参数进行调用,函数中的参数是如何传递的,也知道函数的闭包了,那么接下来我就可以跟你说说函数的比较高级的用法,也就是装饰器。

如果你还对函数的概念有些模糊,可以看下咱们往期关于函数相关的内容再来看这一篇,这样会比较好消化一些。

其实就是想告诉你一个 Google 的搜索技巧

好了,现在我们来看这么一个例子:

你先思考 10 秒钟,你觉得输出结果是什么?

输出结果是:

本文隐藏内容 登陆 后才可以浏览
用户合法:

你看咱们举得这个例子,只要有别的地方需要验证用户合法性,就直接去引用这个装饰器就可以了。

ok,以上就是装饰器的介绍,你可以自己实现一个装饰器,比如检验文件是否以 xxx 结尾,或者测方法的执行时间。

4 Replies to “Python 爬阶梯 | 语法糖是什么玩意?Python中的函数高级用法——装饰器”

  1. say不需要参数的时候,这样做是否也是装饰器,即func_1中没有内嵌函数:
    def func_1(func):
    print(‘fuc_2’)
    func()

    @func_1
    def say():
    return(‘xiaoshuaib’)

    print(say)

    那是否可以理解为在say如果需要参数传入的情况下,就一定要像文中那样写一个嵌套函数?

    1. 你可以再理解一下装饰器的概念,所谓装饰器就是接收另一个函数,然后扩展这个函数的行为而不是显示的直接修改它。

      在你写的例子中,func_1 函数没有返回任何东西,严格意义上来说,这就不算装饰器了。

      至于你说的是否一定需要嵌套函数,这个和是否需要传入参数无关,而是和业务逻辑有关,比如你要计时某一函数的执行时间,一般就会使用嵌套函数,而有些只需要执行一次的函数,也可以不使用嵌套。

  2. 登录验证的案例,
    else:
    return func(username, password) #不明白此处返回为什么一定要带参数,我调试过不带参数,运行为空

    1. 因为这个时候验证通过,可以执行函数,而原有的函数里面是定义了需要携带用户名和密码这两个参数的,如果你不携带参数,那么应该是TypeError: login_user() missing 2 required positional arguments: ‘username’ and ‘password’ , 为啥会是空?

发表评论

电子邮件地址不会被公开。 必填项已用*标注