首页 > 代码库 > Python基础day-8[装饰器补充,迭代器(未完)]

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[装饰器补充,迭代器(未完)]