• 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中是那个内置的装饰器
  • 相关阅读:
    叉积
    Linux IO模型
    uva10201-dp
    如何在Java内使用Protobuf
    uva10651-记忆化搜索
    ZK的几个常用方式
    uva10304-最优二叉搜索树
    uva590-DP-Always on the run
    Git神操作
    在容器内运行JVM时内存的问题
  • 原文地址:https://www.cnblogs.com/vivian0119/p/12024946.html
Copyright © 2020-2023  润新知