zoukankan      html  css  js  c++  java
  • 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中是那个内置的装饰器
  • 相关阅读:
    LTE信令流程之Service Request流程介绍
    LTE信令流程之TAU流程介绍
    LTE信令流程之开机附着、去附着流程分析
    Python 数据分析之可视化工具
    LTE信令流程之切换流程介绍
    js获取昨天日期
    在dll中使用 DirectSound,编译能通过,但会出现内存问题,而且不能发声
    在dll中用DirectSound8同时播放多个wav文件不能发声
    第二次作业
    第三次作业
  • 原文地址:https://www.cnblogs.com/vivian0119/p/12024946.html
Copyright © 2011-2022 走看看