我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

继续描述python代码,本文还是继续描述python装饰器。在上一篇文章里面,苏南大叔描述了使用*args,**kwargs来解决参数传递问题,本文里面使用一个新的思路写法来解决这个问题,写法更加好一些。

苏南大叔:python代码,如何编写不同参数传递方式的装饰器? - 不同参数传递方式
python代码,如何编写不同参数传递方式的装饰器?(图3-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文继续描述python解释器的另外一种较完美写法。本文测试环境:win10python@3.6.8

第一种写法(推荐)

现在先回顾一下目前已有的python装饰器代码结论,代码如下:

def examination(func):
    print("准备参加考试")
    def anyname(*args, **kwargs):
        ''' anydoc '''
        print("考试前")
        func(*args, **kwargs)
        print("考试结束")
    return anyname
@examination
def exam(lang):
    print("考试中:"+lang)
exam("日本语")

苏南大叔:python代码,如何编写不同参数传递方式的装饰器? - 普通方式
python代码,如何编写不同参数传递方式的装饰器?(图3-2)

第二种写法

现在展示第二个python装饰器代码,代码如下:

def examination(*args,**kwargs):
    print("准备考试")
    def _anyname(fn):
        print("考试结束前")
        return fn
    print("考试即将开始")
    return _anyname
@examination()
def exam(lang):
    print("考试中:"+lang)
exam("日本语")

苏南大叔:python代码,如何编写不同参数传递方式的装饰器? - 另外一种写法
python代码,如何编写不同参数传递方式的装饰器?(图3-3)

这个代码模式是在itchat模块中提取中提取到的,目前来看:

  • 省略了两组*args, **kwarg
  • 装饰器必须用函数形式接受参数,也就是第一行*args, **kwarg
  • 这种情况@后面必须是个函数()
  • 但是代码执行逻辑顺序略微有些奇怪。
  • 无法监视到代码结束运行的情况。

相关链接

综述

在本文中,苏南大叔复述了两种更好的装饰器代码。更多python代码内容,请点击链接:

助理微信

微信打赏码

微信公众号

微信小程序

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python