11生成器相关及推导式(附内置函数分析图url)

1、生成器:

  生成器的本质就是迭代器

  生成器的特点和迭代器一样,取值方式也和迭代器一样(__next__(),send():给上一个yield传值)

  生成器一般由生成器函数或者生成器表达式来创建

  其实就是手写的迭代器

2、生成器函数

  和普通函数没有区别,函数里面由yield的函数的就是生成器函数

  生成器函数在执行的时候,默认不会执行函数体,而是返回生成器,通过生成器的__next__()分段来执行这个函数

  send():给上一个yield传值,不能在开头(没有上一次yield),同作一个yield也不能用send()

3、推导式

  1、列表推导式[结果 for循环 条件筛选]

  2、字典推导式{k:v for循环 条件筛选}

  3、集合推导式{k for循环 条件筛选}

4、生成器表达式

  # 没有元祖推导式,所以用小括号的就是生成器表达式。

  (结果 for循环 条件筛选)

  特点:

    1、惰性机制

    2、只能向前

    3、节省内存

通过下面两个例子加深理解:

 1 def func():
 2     print(111)
 3     yield 222
 4
 5
 6 g = func()
 7 g1 = (i for i in g)
 8 g2 = (i for i in g1)
 9
10 print(list(g))  # [222]这里把源头func的数据拿走了
11 print(list(g1))  # 所以从这里开始,源头已经没有数据了
12 print(list(g2))
 1 # 求和函数
 2 def add(a, b):
 3     return a+b
 4
 5
 6 # 生成器函数 0-3
 7 def test():
 8     for r_i in range(4):
 9         yield r_i
10
11
12 g = test()
13
14 for n in [2, 10]:               # next,find,list 还有for循环函数名这几种方法才会拿值,这里没有拿值
15     g = (add(n, i) for i in g)
16 print(list(g))
17
18 # ----------------------------------
19 ‘‘‘
20 解题思路:
21     1、拆分循环:
22         for n in [2, 10]:
23         g = (add(n, i) for i in g)
24         可以拆分为:
25         n = 2
26             g = (add(n, i) for i in g)
27         n = 10
28             g = (add(n, i) for i in g)
29         变形可得
30         n = 10
31             g = (add(n, i) for i in (add(n, i) for i in g))
32     2、仔细审题:
33         这里for循环g并没有取值。直到最后的list(g)才开始拿值。
34         g = 0,1,2,3和n = 10带入上述表达式.如g=0
35         g = (10+i for i in (10+i for i in 0))
36         g = 20
37         故最后结果为20,21,22,23
38     3、注:为什么要变形?
39         需要理解的是,n=2时,这个时候表达式的n并不会把值代入进去,因为g并没有取值。所以n=10时,需要代入的是上面的表达式,而不是一个
40         计算出来的结果。变形可以方便理解。
41     4、核心考点:惰性机制。不到最后不会拿值
42 ‘‘‘

内置函数分类链接

原文地址:https://www.cnblogs.com/cbslock/p/11149633.html

时间: 2024-08-29 17:37:15

11生成器相关及推导式(附内置函数分析图url)的相关文章

day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数

本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印的就是装饰器函数的信息了,如何做呢? from functools import wraps def logger(f): @wraps(f) def inner(*args, **kwargs): """ :param args: 函数名,密码 :param kwargs: 备

python函数知识五 推导式和内置函数一(了解)

17.推导式: 推导式:将for循环多行变成一行 list推导式:[] #普通模式 print([i for i in range(20)]) #循环模式 #[变量 for i in range(20)] print([i+1 for i in range(10)]) #筛选模式 #[变量(加工后) for i in range(20)] print([i for i in range(20) if i % 2 == 1]) 生成器表达器:() #普通模式 print((i for i in r

Python中生成器,迭代器,以及一些常用的内置函数.

知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 通过生成器推导式 python内置函数或者模块提供 生成器函数 yield:一个yield对应一个next,next超过yield数量,就会报错,与迭代器一样. yield与return的区别: return一般在函数中只设置一个,他的作用是终止函数,并传给函数的执行者返回值 yield在生成器中可

Python 基础第十四天(内置函数和匿名函数)

今天主要内容 1.生成器补充--生成器推导式 2.内置函数 3.匿名函数 1.生成器推导式 (1)列表推导式:一行搞定 ,简单,感觉高端.但是,不易排错. 例: l1 = [] for i in range(1,12):  l1.append('python%s期' % i) print(l1) 生成式: l2 = ['python%s期' %i  i  for i in range(1,12)] print(l2) 结构: 循环模式[经过加工的i for i in 可迭代对象] 筛选模式 [经

day14,列表推导式,生成器表达式,内置函数

一.列表推导式.生成器表达式: # li = []# for i in range(1,101):# li.append(i)# print(li) #l1 = [python1期,python2期,python3期.....]# l1 = []# for i in range(1,12):# l1.append('python%s期' % i)# print(l1)#一行搞定,列表推导式:用列表推导式能够构建的任何列表,用别的都可以构建.#一行,简单,感觉高端.但是,不易排错.# li = [

(列表推导式,生成器表达式,内置函数)

一,列表生成式 示例一: 生成1~100的列表 生成1-100的列表 1 2 3 4 5 li = [] for i in range(1,101):     li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期~11期li = []for i in range(1,12): li.append('python{}期'.format(i))print(li) 执行输出: ['python1期', 'python2期', 'python3期'...]

三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

一 三元表达式.列表推导式.生成器表达式 1.三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推导式 #1.示例 egg_list=[] for i in range(10): egg_list.append('鸡蛋%s' %i) egg_list=['鸡蛋%s' %i for i in range(10)] #2.语法 [expression for item1 in iterabl

python 第十二章 生成器+推导式+内置函数一(不常用的)

生成器 # 迭代器:python中内置的一种节省空间的工具 # 生成器的本质就是一个迭代器 # 区别:迭代器自带的,生成器自己写的 # return可以写多个,但是只执行一次 # yield会记录执行位置 # 一个next()对应一个yield def func(): print(123) return "you" print(func()) # 123 # you # return和yield 都是返回值 # 在函数体内将return改成yield的就是一个生成器 def func(

函数生成器、推导式及python内置函数

函数生成器.推导式及python内置函数 函数生成器 生成器的定义 在 Python 中,使用了 yield 的函数被称为生成器(generator). 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器. 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行. 调用一个生成器函数,返回的是一个迭代器对象. 生成器与迭代器的区别 生成