怎么理解装饰器,用过或者写过什么装饰器吗?

1.1.概述:
装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

1.2.详细描述:

1.import logging  8.        ret = oldfunc(*args, **kwargs)  
9.        return ret  
10.  
11.     返回新函数  
12.    return new_func  
13.  
14.  
15.# 通过语法糖使用装饰器  
16.@decorator  
br/>2.# 定义装饰器,接收旧函数  
3.def decorator(oldfunc):  
4.     定义新函数,加强原函数  
5.    def new_func(*args, **kwargs):  
6.        加强代码写这里,记录日志信息....  
7.        logging.error("记录日志信息")  
8.        ret = oldfunc(*args, **kwargs)  
9.        return ret  
10.  
11.     返回新函数  
12.    return new_func  
13.  
14.  
15.# 通过语法糖使用装饰器  
16.@decorator  
17.def square(x):  
18.     获取 两个数的平方  
19.    return x**2  
20.  
21.# 执行  
22.print(square(5))  

1.3.应用场景:
日志记录,统计代码执行时间,权限验证
2.迭代器和生成器的区别
2.1.概述:
生成器是特殊的迭代器,它更加优雅.生成器中的元素不是直接生成好,而是每使用next()方法获取下一个元素的时候才创建,从而大大节省内存空间。迭代器和生成器的区别
2.2.详细描述:
1.迭代器是一个更加抽象的概念,任何对象,如果它的类有next方法和iter方法返回自身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是Python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIterration的异常。
2.生成器(Generator)是创建迭代器的简单而强大的工具。它有列表生成器和函数生成器.函数生成器写起来就像是正规的函数,只是在返回数据的时候需要使用yield语句返回。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
2.3.应用场景:

1.# 列表生成器,其实就是列表推导式的[]写成()  
2.g = (i for i in range(10))  
3.print(next(g))  
4.print(next(g))  
5.print(next(g))  
6.print(next(g))  
7.  
8.  
9.# 通过 函数式生成器 获取 1-10 数字的平方  
10.def sqrt():  
11.    num = 1  
12.    while num <= 10:  
13.        返回平方  
14.        yield num**2  
15.        num += 1  
16.  
17.        调用函数返回生成器  
18.        g = sqrt()  
19.        print(next(g))  
20.        print(next(g))  
21.        print(next(g))  
22.        print(next(g))  

(本文由源码时代技术老师原创撰写,转载请注明出处)