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

@logindef 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 timedef 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_checkdef index():    print("这个是首页")

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

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

原文地址:https://www.cnblogs.com/vivian0119/p/12024946.html

时间: 2024-10-03 07:15:58

python测试开发(02-闭包函数+装饰器)的相关文章

函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数

函数嵌套名称空间与作用域闭包函数装饰器迭代器生成器三元表达式,列表解析,生成器表达式递归与二分法内置函数--------------------------------------------函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数函数的嵌套定义:在一个函数的内部,又定义另外一个函数def max(x,y): if x>y: return x else: return ydef max1(a,b,c,d): res=max(a,b) res2=max(res,c) res3=ma

Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.

Python之面向对象:闭包和装饰器

一.闭包 1. 如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包. def outter(): name='python' def inner(): print name return inner res=outter() 把inner的地址赋值给res res() 相当于执行inner()函数.通过闭包,可以把局部变量在外部也可以使用 2.判断是否为闭包 res.func_closure inner()函数就是一个闭包 3.通过闭包,可以把局部变量在外部也可以

Python作用域--&gt;闭包函数--&gt;装饰器

1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改) 下面我们来看看下面实例: x = 1 def funx(): x = 10 print(x) # 打印出10 funx() print(x) # 打印出1 如果局部没有定义变量x,那么函数内部会从内往外

python之闭包函数 装饰器 作业

一:编写函数,(函数执行的时间是随机的) import randomdef t(): time.sleep(random.randrange(1,3)) print('hello')二:编写装饰器,为函数加上统计时间的功能 import timeimport randomdef timebe(func): def wrapper(*args,**kwargs): start_time=time.time() res = func(*args, **kwargs) end_time=time.ti

&lt;04day&gt;_函数嵌套--闭包函数--装饰器--迭代器--生成器

一.函数的嵌套定义 1.python函数支持嵌套 def f1(): #f1函数的定义 def f2(): #f2函数的定义 print('from f2') def f3(): #f3函数的定义 print('from f3') f2() f1() 嵌套函数--运行结果说明: 1首先调用f1()结果,f1函数为空.担保函f2函数,f2函数有内容打印并且有调用,f2函数包含f3函数,但f3函数无调用. 运行结果: 列子:多个数据之间的大小比较. #!/usr/bin/python # -*- c

Python之命名空间、闭包、装饰器

一.命名空间 1. 命名空间 命名空间是一个字典,key是变量名(包括函数.模块.变量等),value是变量的值. 2. 命名空间的种类和查找顺序 - 局部命名空间:当前函数 - 全局命名空间:当前模块 - 内建命名空间:所有Python环境,所有模块 查找顺序 1.先在当前 (嵌套的或 lambda) 函数的命名空间中搜索 2.然后是在父函数的命名空间中搜索 3.接着是模块命名空间中搜索 4.最后在内置命名空间中搜索 要到内置命名空间都没找到的话,就会弹出NameError 这里看一个例子 i

闭包函数 装饰器

什么是闭包函数 闭:指的是闭包函数数定义在一个函数内部的函数 包:该内部函数包含对外城函数作用域名字的引用 需要结合函数对象的概念将闭包函数返回到全局作用域去使用,从而打破函数层级的限制 为什么要用闭包函数 闭包函数提供了一种为函数体传值的解决方案 如何用闭包函数 # 为函数体传值的方式一:参数 # def func(x,y): # print(x+y) # # func(1,2) 3 # 为函数体传值的方式二:闭包 def outter(x,y): # x=1 # y=2 def func()

闭包函数 装饰器 有参装饰器

闭包函数: 1 内部函数 2 包含对外部作用域而非全局作用域的引用闭包函数的特点: 自带作用域  延迟计算 #闭包函数定义 1 def timmer(func): 2 def inner(*args,**kwargs): 3 re = func(*args,**kwargs) 4 return re 5 return inner 6 7 index(): 8 print("hello") 9 10 index = timmer(index) #index == inner 11 ind