打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
接口测试基础——第7篇 简单的Python知识普及(二)之装饰器

        考虑到本公众号更多的是为了让大家能够在工作中得心应手,而不是测试理论的介绍,所以公众号已经从“IT自动化测试”正式更名为“自动化测试实战”,船长也会继续把工作共需要用到的知识和框架介绍给大家,希望大家能够少走弯路,早日成为“大神”。

        十一长假已经第三天了,不知道小伙伴们是不是都已经到家了,船长在这里祝大家国庆中秋双节快乐!没有回家的小伙伴也要照顾好自己哦~多给家里打个电话!

        休息的同时,我们也要抓住这个可以自由学习的机会,不要偷懒哦~~

        今天我们来学习python里面的“装饰器”

1、我在函数test运行前想先打印一些内容怎么办?

def func(param):
    print u"打印的内容"
    param()

def test():
    print u"test内容"

func(test)

以上代码即可实现,但是如果我有很多函数都要运行前先打印同样的内容,一个一个的去写就会显得非常笨拙。所以有必要有一个方法,只要通过一定的方式即可实现“调用”。

2、闭包

先看一段代码

def closure_conf(prefix):
    def innerFunc(name):
        print prefix, name
    return innerFunc

holiday = closure_conf("10月1日是:")
# holiday("国庆节")
print "function name is:", holiday.__name__

运行以后输出为:

function name is: innerFunc

代码分析:

        我们先定义了一个函数closure_conf(prefix);在该函数内部我们嵌套了另一个函数innerFunc(name);在innerFunc函数中,我们调用了closure_conf的参数prefix(打印出来了);注意,closure_conf函数的返回是innerFunc,是一个函数名,仅仅是函数名,而不是调用(如果你这么写:innerFunc(),就是调用了)。简单来说,就是一个函数内嵌另一个函数,并且返回内嵌函数的函数名。

        接下来是我们调用closure_conf并且传了一个参数,打印这个运行后的名字__name__。

        一般来说运行什么函数,就应该打印出的名字就是这个函数名,但是这里我们发现打印的竟然是内嵌函数的名字,也就是说你给closure_conf传递了参数并运行时,函数变成了innerFunc,但是innerFunc并没有运行,因为没有打印innerFunc里面的语句。如果放开注释的语句,就发现可以运行innerFunc函数了。

以上就是一个闭包。也就是说,在Python中创建一个闭包需要满足以下三点:

- 闭包函数必须有内嵌函数
- 内嵌函数需要引用该嵌套函数上一级中的变量
- 闭包函数必须返回内嵌函数

3、装饰器

        装饰器的定义是:装饰器实质上是一个函数。它把一个函数作为输入并且返回另外一个函数。其实是闭包概念的深化。

# coding: utf-8

from functools import wraps


def testFunc(func):

    @wraps(func)
    def wrapper(*args, **kwargs):
        print func.__name__
        print args
        print kwargs
        return func(*args, **kwargs)
    return wrapper


@testFunc
def index(*args, **kwargs):
    print 'welcome to index'


print index('10.1', holiday="nation's day")

运行以上代码:

index
('10.1',)
{'holiday': "naiton's day"}
welcome to index

以上代码就是装饰器了:粉色的func作为参数参数,并且作为蓝色的wrapper函数的返回(返回的是运行后的函数),而蓝色的func函数又是红色函数testFunc的返回(返回的只是函数名)。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
给妹子讲python-S01E22神奇的装饰器
装饰器(让你的函数更强)
装饰器_装饰器flage = true
python中的组包与解包
《源码探秘 CPython》63. 闭包是怎么实现的?
说说 Python 中的闭包
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服