一、列表生成式
在之前的学习中生成一个list,采用下列方式
list(range(1,10))
但是,现在有这样一个需求,生成一个list[1,4,9,16,25,36,49],如果采用for循环的方式会显得比较繁琐,这时候就用到列表生成式,一句话搞定。
[x*x for x in range(1,11)]
二、生成器
在Python中,一边循环一边计算的机制称为生成器
定义生成器的方式:
(1)列表生成式的[]改为()
使用for循环进行调用即可
(2)定义yield关键字
如果一个函数定义中包含yield关键字,则这个函数为一个生成器
注意:yield的原理是,在每次进行迭代调用next()时执行,遇到yield语句返回,下次执行时从上次返回的yield语句处继续执行。
三、迭代器
(一)可以直接使用for循环的数据类型有以下几种:
1.集合数据类型:如list、tuple、dict、set、str等
2.生成器:包括生成器和带yield的函数
我们将这些可以直接使用for循环的对象统称为可迭代对象,使用isinstance()进行判断
而可以被next()函数调用并不断返回下一个值的对象则称为迭代器,使用isinstance()进行判断
可迭代对象转化为生成器使用iter()函数
注意:Python的for循环本质上就是通过不断调用next()函数实现的
四、装饰器
本质上来说:装饰器是函数,去为其他函数添加附加功能,在不改变原函数的情况下
(一)有以下重要原则:
1.不能修改被装饰函数的源代码
2.不能修改被装饰函数的调用方式
(二)如何实现一个装饰器
1.理解函数即变量
2.高阶函数
a,把一个函数名当做实参传给另一个函数(在不锈钢被装饰函数源代码的情况下为其添加功能)
b.返回值中包含函数名(不修改函数的调用方式)
3.嵌套函数
示例
import time
def timer(func):
def deco():
start_time = time.time()
func()
stop_time = time.time()
print("the func time")
return deco
def test1():
print("in the test1")
@timer #test1 = timer(test1)
test1()
本文章参考了廖雪峰老师的Python教程