ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

python基础语法学习: 生成器

2026/8/28 7:58:39 拓冰建站 浏览量
python基础语法学习: 生成器 文章目录生成器生成器函数yield 关键字生成器推导式生成器表达式生成器生成器的本质是迭代器创建生成器的两种方案:生成器函数生成器表达式生成器函数生成器函数中有一个关键字 yield普通函数deffunc():print(9999)return123retfunc()# 9999print(ret)# 123把普通函数中的return替换为yield就变成了生成器函数deffunc():print(9999)yield123retfunc()print(ret)# generator object func at 0x000001DFFBDACAC0生成器函数执行的时候, 得到的是生成器, 并不会执行函数因为生成器的本质是迭代器, 所以我们可以像使用迭代器一样去使用它deffunc():print(9999)yield123retfunc()print(ret.__next__())打印:9999123上面这段代码中9999是ret.__next__()打印的, 123是通过print() 打印的函数返回值yield 只有执行到next的时候才会返回数据yield 关键字只要函数中出现了yield, 它就是一个生成器函数作用:可以返回数据可以分段执行函数中的内容 , 通过__next__()可以执行下一个yield的位置deffunc():print(1)yield666print(2)yield666print(3)yield666retfunc()ret.__next__()# 1ret.__next__()# 2ret.__next__()# 3可以节省内存生成器推导式推导式:简化代码语法:列表推导式[数据 for循环 if 判断]集合推导式{数据 for循环 if 判断}字典推导式{k: v for循环 if 判断}注意: 没有元组推导式创建一个列表, 包含数字1到9所有数据方式一: 循环添加lst[]foriinrange(10):lst.append(i)print(lst)方式二: 列表推导式lst[xforxinrange(10)]生成器表达式gen(i**2foriinrange(10))print(gen)# generator object genexpr at 0x00000169DC4B8FB0gen(i**2foriinrange(10))print(gen)# generator object genexpr at 0x00000169DC4B8FB0print(gen.__next__())# 0print(gen.__next__())# 1print(gen.__next__())# 4print(gen.__next__())# 9全部打印:方法一:gen(i**2foriinrange(10))foritemingen:print(item)方法二:gen(i**2foriinrange(10))lstlist(gen)print(lst)# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]如上所示代码, list()中包含了循环迭代 , 例如:slist(hello)print(s)# [h, e, l, l, o]list() 将括号内的字符串循环迭代, 最终将元素一个个放入列表中所以 list() 中一定有for循环, for循环中一定有 next()