前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >装饰器的简单应用

装饰器的简单应用

作者头像
无涯WuYa
发布2018-10-24 14:17:57
3680
发布2018-10-24 14:17:57
举报

在Python的函数中,函数的参数我们成为形式参数,想比较而言,默认参数在实际的应用中更加丰富,还有一种情况就是函数的参数是函数,特别是在接口自动化测试中经常应用到这一思想。函数的返回值在一定程度上来说就是为了给另外一个函数提供函数执行的参数而已,这是它的意义,不管在函数中是否编写return函数它都是有返回值的。函数的参数是函数,这句话可以拿接口测试的一个案例作为说明,比如登录成功后,会返回token,那么另外一个请求的需要和登录成功后的token一致,否则就返回登录无效,说的简单点,就是另外一个请求需要使用到登录成功后的token的值,那么登录中可以返回,并且当参数一样给另外一个函数执行,来看一个简单的实例代码:

代码语言:javascript
复制
def login(username,passwd):
   if username=='wuya' and passwd=='admin':
      return 'ma5QmSCrnZnzqCJ98fd1540130490175'

def order(token):
   if token=='ma5QmSCrnZnzqCJ98fd1540130490175':
      return '订单的数据'
   else:
      return '登录无效'

if __name__ == '__main__':
    print(order(login('wuya','admin')))

执行后的结果如下图所示:

针对如上的一个案例,通过装饰器对代码进行改造下,见构造后的源码:

代码语言:javascript
复制
def login(func):
   def getToken(*args,**kwargs):
      r=func(*args,**kwargs)
      if r:
         return r
   return  getToken

@login
def order(username,password):
   if username=='wuya' and password=='admin':
      return '订单的数据'
   else:
      return '登录无效'

if __name__ == '__main__':
   print(order('wuya', 'admin'))

再次执行如上的代码,见执行后返回的结果如下图所示:

这里就是一个装饰器的简单应用,查看订单的数据必须要进行登录系统成功后才可以查看,否则就返回登录无效(访问页面直接跳转到登录的页面)。这是产品的设计方式,执行order()函数后,函数执行的顺序为:

  1. 执行函数login并把order当作函数login的参数来使用
  2. login函数的返回值重新赋值给order函数
  3. 调用函数order其实执行的是getToken函数的,原来的order函数被覆盖
  4. 函数一旦使用装饰器后,被装饰的函数重新赋值成装饰器的内部函数(也就是order函数被getToken函数被赋值)

见函数执行的顺序截图:

见login函数的返回值重新赋值给了order函数截图:

见调用order函数实际赋值给装饰器内部函数getToken函数截图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档