在上一章我们说到装饰器的原则和基本用法,下面来补充一下:如果函数加参,装饰器该如何变化

1,还是用上一章的源代码

2,给test2加个参数name

报错了,本来给test2加一个name参数,为了实现“li”能成功添加到test2里,按一般添加函数的方法没有错,但是报错显示没有“li”这个参数值。忽略了函数在被调用到装饰器里发生了什么变化

2,修改装饰器,让装饰器调用到test2的参数

还是报错了,仔细看,当我们在添加了装饰器中函数值后,按正常思路走,test2的name值应该也会被

f() 和 d()调用才对,其实是对的,如下

3,将test1注释掉,因为上图报错显示test1没有参数

这时候只输出test2,发现添加参数成功,是的,这样其实就是成功了,但是问题来了,如果一个程序里有的函数需要加参数,有的函数不需要加参数,那怎么弄?如果是这样的话,就会出现 2 步骤中的报错

4,在装饰器里用“ * ” 号来针对不加参和加参的混合应用

这里我们在 agr 前加上 * 号 ,再次运行,发现test1没有报错了。加“*” 号 其实就是为了函数的混合用法

(结合上一篇博客,装饰器这样的应用,其实已经满足日常百分之九十的工作了)


下面要说一个高级用法

  例子:公司有很多的网站页面需要输入操作,我们在python里,用一个函数代表一个页面来完成

如图:

运行后:

这是没有用到会话,只是直观的体现,这样的方式网上有很多种,这种方式可以说是经典之作

*********补充:如果home函数有返回值,装饰器需做返回结果的修改,如下图**********

执行后:

:OK


  高潮来了:还是以上的代码,看代码我们发现,代码这里的home和bbs认证方式是一样的,都是开头定义好的,但是在真正的实际环境里,网页的认证有很多种,ssh,加密,密钥认证等,甚至在同一组网页中,每一个网页的认证方式可能都不一样。这里假设Home和bbs的认证方式不一样,那应该如何修改装饰器来适应变化呢?

这需要添加的东西就比较多了,先看添加完后的代码

图的解释就不细说了(文字描述太多),这里最好实践一下,然后加上断点,一步步走一遍就明白了


  到此python装饰器大致就了解并可以运用了,还有很多方式,一切都是以工作中遇到的问题来对应想办法解决

python装饰器中高级用法(函数加参)的更多相关文章

  1. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

  2. python装饰器1:函数装饰器详解

    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函 ...

  3. python装饰器内获取函数有用信息方法

    装饰器内获取函数有用信息方法 .__doc__用于得到函数注释信息 .__name_用于得到函数名 在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc_ ...

  4. python装饰器 高阶函数 函数闭包

    1.装饰器: 本质是函数,功能是为其他函数添加附加功能 原则:1.不修改被装饰函数的源代码 2.不修改被修饰函数的调用方式 装饰器=高阶函数+函数嵌套+闭包 #装饰器格式框架def wrap(func ...

  5. 一篇文章搞懂Python装饰器所有用法

    01. 装饰器语法糖 如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上 ...

  6. Python装饰器高级用法

    在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数 ...

  7. Python装饰器主要用法

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' user = "admin" passwd = ...

  8. Python装饰器和回调函数

    1.装饰器 装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现. import functools def log(fun ...

  9. python 装饰器统计某个函数的运行时间

    import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime. ...

  10. python装饰器的用法

    def logger(func):    def inner(*args, **kwargs): #1         print "Arguments were: %s, %s" ...

随机推荐

  1. Web文件上传模块 Plupload

    Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度.图像自动缩略和上传分块.可同时上传多个文件. 示例代码: <!-- Load Queue widget CSS a ...

  2. 沁恒蓝牙系列芯片USB烧录故障排查

    目录 使用USB烧录时让ISP工具能够识别芯片的操作是按住评估板上的"Download"按键,或者将PB22短接到GND,同时给板子上电.若是第一次拿到芯片,codeflash中是 ...

  3. awk 计算

    [root@BJ-DATABASES lastday]# ps -aux| grep nginx|grep -v greproot 13783 0.0 0.0 56796 1208 ? Ss 11:1 ...

  4. python_异常处理(try except)

    1,异常捕获 异常捕获的字段为python解释报错的最后一行的第一个单词.使用try方法,程序报错时,可以使用except方法匹配报错的异常关键字,继续except下方定义的代码,从而保证代码可以正常 ...

  5. boss直聘上看信息 但是不会显示已读

    大家在boss直聘上看 想看的boss回你的信息但是又不想显示已读 可以按F12 打开控制台  查找标出文件 查看lastmsg文本里面就是最后一次发你的信息

  6. vi 自增

    (1). 建立第一个列表项.确保它以数字开始.(2). qa - 用寄存器 'a' 开始记录(3). Y - 抽出这个列表项(4). p - 把该项的一个副本放置在下一行上(5). CTRL-A - ...

  7. 关于Java中数组的简单使用

    关于java中数组的简单使用--继java环境配置后的第二篇学习笔记 近期在学习Java的过程中学到了数组的部分,至于为什么我会到数组才来写这个,主要是数组这一章节的内容感觉还是与之前学的C里面的数组 ...

  8. 【运行报错】Openstack 在部署 Keystone 时出现依赖包报错 (解决安装时依赖包报错问题)

    报错信息 在 安装openstack T版本的时候 keystone时出错: Error: Package: python2-qpid-proton-0.26.0-2.el7.x86_64 (cent ...

  9. 《Makefile中基本字符串替换函数与处理函数的使用参考》

    https://blog.csdn.net/ababab12345/article/details/120723396

  10. [部署日记]Android Studio在安装完后,sdk依旧提示SDK emulator directory is missing

    问题起源: 今天在闲着没事搞了个go的rest-api,用postman测试了一下可行,于是一拍大腿决定写一个安卓手机程序,于是一拍大腿重新下载了卸载没多久因为没空间放原神的Android Studi ...