python的高级特性
近期基于一些代码的改善,来介绍一下python里面非常有用的高级特性,让代码尽量简化且可读性高,提升开发效率。一、列表生成式
正常我们要去创建一个列表的时候,是这样做的:
列表过大的时候,存储空间和读写难度都比较大,用生成器的方式,用算法推导出后续的元素,就不用创建完整的List,即节省了空间也提升了读取数据速度。 如下所示:
list、tuple、dict、set、str还有上面的生成器和生成器函数,可以直接用for循环的对象统称为可迭代对象。
正常我们要去创建一个列表的时候,是这样做的:
使用列表生成式的可以简化成这样:#普通做法L = []for x in range(1,11):L.append(x*x)print(L)打印出来的结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
由上可见,一个列表循环生成列表直接用一行代码就实现了。1.2列表生成式中加入条件语句L1 = [x1*x1 for x1 in range(1,11)]print(L1)打印出来的结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
用if...else..条件语句里面加入 if else,这时候条件语句要放前面myvalue = [x2 for x2 in range(1,11) if x2%2 ==0]
myvalue2 = [x3 if x3%2 ==0 else -x3 for x3 in range(1,11)]
二、生成器列表过大的时候,存储空间和读写难度都比较大,用生成器的方式,用算法推导出后续的元素,就不用创建完整的List,即节省了空间也提升了读取数据速度。 如下所示:
L2为列表,G2为生成器,区别很小,就[]与()但是G2取值不能直接print(),要用其他方法,一个方法是用next(),但这个只能返回一个,一般不用,另外一个是直接用for i in G2直接遍历,如下所示:L2 = [x4*x4 for x4 in range(1,11)]print(L2)G2 = (x4*x4 for x4 in range(1,11))
一般生成器会用函数来写,生成器函数使用yield关键字来暂停函数执行并产生一个值,在需要下一个值的时候恢复执行,这种机制允许生成器按需生成值,无需一次将所有值加入内存中,从而节省空间,如下所示:L3 = []for n in G2:L3.append(n)print(L3)
三、迭代器def fib(value):n,a,b = 0,0,1while n<value:yield ba,b = b,a+bn = n+1return "done"f = fib(10)L4 = []for x5 in fib(10):L4.append(x5)print(L4)
list、tuple、dict、set、str还有上面的生成器和生成器函数,可以直接用for循环的对象统称为可迭代对象。
生成器不但可以作用于for循环,还能被next()函数调用返回下一个值,这种可以被next()函数调用返回下一个值的对象称为迭代器。
迭代器是一个实现了迭代器协议的对象,可以被next()函数返回,而生成器是一种特殊的迭代器,可以通过函数来创建,使用yield来返回。
迭代器示例:
mylist2 = [1,2,3,4,5]literator = liter(mylist2)#使用next()函数遍历元素while True:try:element = next(literator)except StopIteration:break#没有元素时退出循环

浙公网安备 33010602011771号