python测试开发(02-闭包函数+装饰器)

Posted vivian0119

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python测试开发(02-闭包函数+装饰器)相关的知识,希望对你有一定的参考价值。

一. 满足闭包函数条件
# 条件一:函数中嵌套函数
# 条件二:外层函数返回内层嵌套函数名
# 条件三:内层嵌套函数有引用外层的一个非全局变量

def func(num, b):
def inner():
print(num)
print(b)
print("这个三计算买书方式的函数")
return inner

res=func(100," python")
res()
print(res.__closure__)

二. 装饰器
# 装饰什么函数,就传什么函数
def login(func):
def fun():
username = ‘python3‘
password = ‘123‘
user = input("请输入账号:")
pwd = input("请输入密码:")
if user == username and pwd == password:
func()
else:
print("账户或者密码错误")

return fun


@login
def index():
print(‘这是网站首页‘)
# 传进去的index在放在closure属性中
# index.__closure__
# index=login(index)
index()
#!/usr/bin/python3
#-*- coding:utf-8 -*-
#@Time:2019-12-11 06:46

# def add(func):
# def fun(a,b):
# print(‘-:‘, a-b)
# print(‘*:‘, a*b)
# func(a, b)
# return fun
#
1. 装饰有参数的函数
# @add
# def add_num(a,b):
# print("+:", a+b)
# add_num(3,4)
#
# # 装饰无参数的函数
# def index():
# print(‘这是网站首页‘)
#
# index()

# # 升级版本:同时装饰有参数和无参数的函数
# def add(func):
# def fun(*args, **kwargs):
# print("调用装饰器功能代码:登录")
# func(*args, **kwargs)
# return fun
# @add
# def index():
# print(‘这是网站首页‘)
#
# @add
# def good_list(num):
# print("商品列表第{}页".format(num))
# index()
# print("--------")
# good_list(9)



2.装饰器装饰类
# 升级版本:同时装饰有参数和无参数的函数
# def add(func):
# def fun(*args, **kwargs):
# print("调用装饰器功能代码:登录")
# return func(*args, **kwargs)
# return fun
#
# @add
# class Myclass:
# def __init__(self, name, age):
# self.name=name
# self.age= age
# m=Myclass("alex", 33)
# 未加装饰器
# print(m) #<__main__.Myclass object at 0x1099de5f8>
# 未加装饰器
# print("m的值:", m)

# 作业一:一个玩着呢的闭包需要满足的条件
‘‘‘
# 条件一:函数中嵌套函数
# 条件二:外层函数返回内层嵌套函数名
# 条件三:内层嵌套函数有引用外层的一个非全局变量
‘‘‘

# 作业二:定义一个计算函数运行时间的装饰器
import time
def clc_time(func):
def fun(*args, **kwargs):
start_time=time.time()
func(*args, **kwargs)
stop_time=time.time()
print("运行时间:", stop_time-start_time)
return fun

# 作业三:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都不许在输入用户名和密码
# {"user":"alex","pwd":"123","token":False}
with open(‘user‘) as f:
usrs=eval(f.read())
def login_check(func):
def ado():
while not usrs[‘token‘]:
print(‘------登录页面------‘)
usrname=input("账号:")
password=input("密码:")
# 登录认证
if usrs[‘user‘] ==usrname and usrs["pwd"] ==password:
usrs[‘token‘]=True
func()
else:
print("账号或密码错误")
return ado

@login_check
def index():
print("这个是首页")


@login_check
def page1():
print("这个是第1页")
index()
page1()



# 用类实现装饰器
# 多个装饰器装饰同一个函数
# python中是那个内置的装饰器

以上是关于python测试开发(02-闭包函数+装饰器)的主要内容,如果未能解决你的问题,请参考以下文章

python-闭包和装饰器-02-装饰器(decorator)

python-闭包和装饰器-02-装饰器(decorator)

python之装饰器

python开发装饰器的应用

浅谈Python装饰器

python闭包和装饰器