python-生成器generator

生成器generator
(1) 定义:能够动态(循环一次计算一次返回一次)提供数据的可迭代对象。
(2) 作用:在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空间。 数据量越大,优势越明显。以上作用也称之为延迟操作或惰性操作,通俗的讲就是在需要的时候才计算 结果,而不是一次构建出所有结果。

1 生成器函数

(1) 定义:含有yield语句的函数,返回值为生成器对象。
(2) 语法

# 创建:
def 函数名():yield 数据
	…

# 调用:
for 变量名 in 函数名(): 
	语句

(3) 说明:
– 调用生成器函数将返回一个生成器对象,不执行函数体。 – yield翻译为”产生”或”生成”
(4) 执行过程:
a. 调用生成器函数会自动创建迭代器对象。
b. 调用迭代器对象的next()方法时才执行生成器函数。

c. 每次执行到yield语句时返回数据,暂时离开。
d. 待下次调用next()方法时继续从离开处继续执行。
(5) 原理:生成迭代器对象的大致规则如下
a. 将yield关键字以前的代码放在next方法中。
b. 将yield关键字后面的数据作为next方法的返回值。
(6) 演示:

def my_range(stop):
	number = 0
	while number < stop: 
		yield number
		number += 1

for number in my_range(5):
	print(number)  # 0 1 2 3 4

2 内置生成器

2.1 枚举函数enumerate

(1) 语法:

1  for 变量 in enumerate(可迭代对象):
2      语句 3
4  for 索引 , 元素in enumerate(可迭代对象):
5      语句

(2) 作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。
(3) 演示:

list01 = [43, 43, 54, 56, 76]
# 从头到尾读            -- 读取数据
for item in list01:
	print(item)

# 非从头到尾读          -- 修改数据
for i in range(len(list01)): 
	if list01[i] % 2 == 0:
		list01[i] += 1

for i, item in enumerate(list01):  # -- 读写数据
	if item % 2 == 0: 
		list01[i] += 1

2.2 zip

(1) 语法:

1  for item in zip(可迭代对象1, 可迭代对象2):
2      语句

(2) 作用:将多个可迭代对象中对应的元素组合成一个个元组,生成的元组个数由最小的可迭代对象决 定。
(3) 演示:

list_name = ["悟空", "八戒", "沙僧"] 
list_age = [22, 26, 25]

# for 变量 in zip(可迭代对象1,可迭代对象2)
for item in zip(list_name, list_age): 
	print(item)
# ('悟空 ', 22) # ('八戒 ', 26) # ('沙僧 ', 25)

# 应用:矩阵转置
map = [
		[2, 0, 0, 2], 
		[4, 2, 0, 2], 
		[2, 4, 2, 4], 
		[0, 4, 0, 4]
]
# new_map = []
# for item in zip(map[0],map[1],map[2],map[3]): #     new_map.append(list(item))
# print(new_map)

# new_map = []
# for item in zip(*map):
#     new_map.append(list(item))

new_map = [list(item) for item in zip(*map)] 
print(new_map)
# [[2, 4, 2, 0], [0, 2, 4, 4], [0, 0, 2, 0], [2, 2, 4, 4]]

4.3 生成器表达式
(1) 定义:用推导式形式创建生成器对象。

(2) 语法:

1  变量 = (表达式 for 变量 in 可迭代对象 if 条件)

相关推荐

  1. python-生成器generator

    2024-07-14 13:32:03       21 阅读
  2. ES6生成器(Generator)

    2024-07-14 13:32:03       36 阅读
  3. Es6 Generator 生成器函数

    2024-07-14 13:32:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 13:32:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 13:32:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 13:32:03       57 阅读
  4. Python语言-面向对象

    2024-07-14 13:32:03       68 阅读

热门阅读

  1. ACE之ACE_Handle_Set

    2024-07-14 13:32:03       20 阅读
  2. 微服务有哪些组件?

    2024-07-14 13:32:03       18 阅读
  3. LVM调整VG和PV

    2024-07-14 13:32:03       23 阅读
  4. docker部署sentinel

    2024-07-14 13:32:03       20 阅读
  5. 在Spring Boot中集成分布式日志系统

    2024-07-14 13:32:03       31 阅读
  6. PHP FTP: A Comprehensive Guide

    2024-07-14 13:32:03       24 阅读
  7. 深入解析std::string的设计哲学【C++、STL库】

    2024-07-14 13:32:03       20 阅读
  8. 常用几种远程控制协议总结(telnet,rlogin,ssh,rfb,rdp)

    2024-07-14 13:32:03       18 阅读
  9. Rockchip RK3588 - 从零开始制作recovery系统

    2024-07-14 13:32:03       20 阅读
  10. 护网HW面试—apache&iis&nginx中间件解析漏洞篇

    2024-07-14 13:32:03       28 阅读
  11. 响应状态码

    2024-07-14 13:32:03       23 阅读
  12. python生成器与迭代器

    2024-07-14 13:32:03       27 阅读
  13. 导航守卫都有哪些?有什么用?

    2024-07-14 13:32:03       25 阅读