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)

 

posted @ 2017-06-15 22:10  neuropathy_ldsly  阅读(155)  评论(0)    收藏  举报