Python基础day-8[装饰器补充,迭代器(未完)]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础day-8[装饰器补充,迭代器(未完)]相关的知识,希望对你有一定的参考价值。
wraps模块:
让函数保留原来的说明信息。
在闭包函数上面 @wraps 可以把原代码的解释,引用到装饰器中,让用户彻底无法感知装饰器的存在
使用 func.__doc__ 和 print(help(func))来查看函数的注释信息
from functools import wraps import time def coutime(func): @wraps(func) #调用wraps模块 def wrapper(*args,**kwargs): # ‘a123123123123123213123‘ start = time.time() ret = func(*args,*kwargs) stop = time.time() print(‘run time is %s‘%(stop - start)) return ret return wrapper @coutime def timerand(name,age): ‘askdnalskdjlaksjdlasjdasd‘ time.sleep(random.randrange(1,5)) print(‘Hello %s age:%s‘%(name,age)) help(timerand) #使用help查看函数的注释说明
执行结果:
D:\Python\Python36-32\python.exe E:/Python/DAY-8/day8_笔记.py Help on function timerand in module __main__: timerand(name, age) askdnalskdjlaksjdlasjdasd #完全隐藏 Process finished with exit code 0
有参装饰器:
有参装饰器 def high(auth_path=‘file‘): #接受参数 def big(func): def up(*args,**kwargs): if auth_path == ‘file‘: print(‘file‘) elif auth_path == ‘ldap‘: print(‘ldap‘) elif auth_path == ‘mysql‘: print(‘mysql‘) return up return big @high(auth_path=‘ldap‘) #调用装饰器传入参数 def pr(): print(‘hello‘) pr()
迭代:
重复执行
下一次的重复执行依赖于上一次执行的结果
以下代码只满足重复执行,每下一次执行都是从头开始执行的,所以不属于迭代。
while True: cmd=input(‘>>: ‘) print(cmd)
以下代码满足重复执行,而且每下一次执行都是从上一次执行后的结果开始执行的,属于迭代
l=[‘a‘,‘b‘,‘c‘,‘d‘] count=0 while count < len(l): print(l[count]) count+=1
迭代器:
python为了提供一种不依赖于索引的迭代方式,会为一些对象内置__iter__方法,obj.__iter__称为可迭代的对象。
s1=‘hello‘ l=[1,2,3] t=(1,2,3) set1={1,2,3} d={‘a‘:1,‘b‘:2,‘c‘:3} f=open(‘db.txt‘,encoding=‘utf-8‘)
字符串、元组、列表、集合、字典、文件等都是可迭代对象,迭代的过程中都能够用到迭代器。
迭代器就是obj.__iter__()得到的一个结果,每次使用obj.__next__()都能够获得一个迭代后的结果,当所有的元素都迭代后,会抛出“StopIteration”的错误提示表示没有内容可以继续迭代了。
d={‘a‘:1,‘b‘:2,‘c‘:3} i=d.__iter__() #i叫迭代器 print(i) print(i.__next__()) print(i.__next__()) print(i.__next__()) print(i.__next__()) #StopIteration
迭代器的优缺点:
迭代器的优点
1:提供了一种不依赖于索引的取值方式
2:惰性计算。节省内存
迭代器的缺点:
1:取值不如按照索引取值方便
2:一次性的。只能往后走不能往前退
3:无法获取长度
迭代器的应用
在for循环迭代的过程中,每一次的循环都有迭代器的参与。
l=[‘x‘,‘y‘,‘z‘] for item in l: #i=l.__iter__() print(item)
以上是关于Python基础day-8[装饰器补充,迭代器(未完)]的主要内容,如果未能解决你的问题,请参考以下文章