? ? 用列表推导式生成列表,当生成列表元素特别多的时候,空间浪费很大,会引起大量的元素占用空间,从而浪费空间。可用列表生成器。
只要将列表推导式中的[]换成()
列表推导式返回的是值,列表生成器返回的是对象。
取列表生成器中的元素时要借用next函数
next(变量名) 取完后将“报错”? next可理解为一个指针,指针不会回退的,直到抛出异常。
生成器相当于是个算法:通过next()计算值
例子:斐波那契数列(从第三个元素开始,每个元素是前两个元素的和)
ls = [] #创建一个空列表接收数列
def fibonacci(num): #给一个斐波那契数列长度参数num
first,second = 1,1
index = 0
while index < num:
ls.append(first)
first,second = second,first + second
index += 1
if __name__ == '__main__':
fibonacci(10)
print(ls)
数据存储在列表里也会造成内存浪费,可以将函数转换为列表生成器,通过yield关键字,函数返回值就是生成器。改进后的代码:
ls = []
def fibonacci(num):
first,second = 1,1
index = 0
while index < num:
ls.append(first)
first,second = second,first + second
yield first
index += 1
if __name__ == '__main__':
s=fibonacci(10)
for i in s:
print(i)
yield
关键字的作用:
具有
return
的功能,能够返回函数的值
当一个函数出现
yield
关键字的时候,那么这个函数在被调用执行的过程中,返回的是一个对象(生
成器),需要借助
next()
方法进行或者相对应的值
|