当前位置: 首页 > news >正文

河南卫生基层系统网站建设vs2010网站开发教程c

河南卫生基层系统网站建设,vs2010网站开发教程c,网站加载优化,石家庄做网站建设的公司前言:什么是生成器,他和迭代器的区别是什么?什么时生成器表达式,为什么和列表推导式那么像呢? 生成器: 定义:能够动态(循环一次,计算一次,返回一次&#xf…

前言:什么是生成器,他和迭代器的区别是什么?什么时生成器表达式,为什么和列表推导式那么像呢?

生成器:

定义:能够动态(循环一次,计算一次,返回一次)提供数据的可迭代对象。

作用:在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空间。延迟操作或者惰性操作,在需要的时候计算结果,而不是一次构建所有结果。

生成器原理代码案例:

"""生成器原理"""
class MyGenerator:def __init__(self):self.list_generator = []self.index = -1def __iter__(self):return selfdef __next__(self):try:self.index += 1return self.list_generator[self.index]except IndexError:raise StopIterationmy_generator = MyGenerator()
my_generator.list_generator = [1, 2, 3, 4, 5, 6]
for item in my_generator:print(item)  # 1 2 3 4 5 6

 生成器函数:

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

调用生成器函数将返回一个生成器对象,不执行函数体,调用迭代器对象的next()方法时才执行生成器函数, 每次执行到yield语句时返回数据,暂时离开,待下次调用next()方法时继续从离开处继续执行。

yield原理大致为:将yield语句之前的代码放入next函数中,之后的数据作为next函数的返回值。

生成器函数的代码案例:

def generator_func():list_nums = [1, 2, 3, 4, 5, 6]for item in list_nums:yield itemdef_generator = generator_func()
# 第一次迭代
for item in def_generator:print(item)  # 1 2 3 4 5 6# 第二次迭代
for item in def_generator:print(item)  # 

上面的generator_func函数 与 上面我们写的MyGenerator类型 做的是同一件事,MyGenerator是生成器的原理。通过上面生成器原理我们可以知道,生成器既是一个可迭代对象,又是一个迭代器。但是我们每次迭代生成器的时候,都是使用同一个生成器对象,当我们迭代过一次生成器对象时,生成器对象的 index指针已经指向最后一个,当我们再次遍历生成器对象时,生成器对象的__next__会抛出StopIteration来直接终止迭代。

生成器表达式:

定义:用推导式形式创建生成器对象。

代码案例:

# 生成器表达式
generator_nums = (i for i in range(5))
print(generator_nums.__next__())  # 0

 内置生成器:

枚举函数 enumerate

使用代码案例:

# enumerate 枚举函数 (生成器)
list_nums = [1, 2, 3]
for item in enumerate(list_nums):print(item)  # (0, 1) (1, 2) (2, 3)for i, item in enumerate(list_nums):print(i, item)  # 0 1, 1 2, 2 3

 zip

使用代码案例:

# zip 压缩 (生成器)
list_keys = ['name', 'age', 'sex']
list_values = ['tan', '22', 'nan']for item in zip(list_keys, list_values):print(item)  # ('name', 'tan') ('age', '22') ('sex', 'nan')# 字典转换
dict_person = dict(zip(list_keys, list_values))
print(dict_person)
dict_person = {k: v for k, v in zip(list_keys, list_values)}
print(dict_person)# 常用于矩阵转置
list_map = [[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4]
]
print([list(item) for item in zip(*list_map)]) 
# [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]

 让我们来看看几道常考的面试题吧

面试题:

        1.请简述迭代器和生成器的却别。

                答:迭代器只有__next__函数,只负责生成下一个元素,

                        可迭代对象每次被for时都会调用__iter__函数创建新迭代器,

                        生成器既有__next__函数也有__iter__函数,但__iter__函数返回自身对象,

                        所以生成器对象第二次参与for循环时不再执行。

        2.请简述生成器表达式和列表推导式的区别。

                答:首先生成器表达式和列表推导式在语法上只有中括号和小括号之分,

                        列表推导式更擅长于对数据的增删改,但所有数据占用内存空间。

                        生成器表达式会产生生成器对象,即使产生大量数据也只存储当前,

                        不存之前数据,不占内存。

http://www.yayakq.cn/news/68052/

相关文章:

  • 综合门户网站开发在手机里面开网店怎么开
  • 网站设计师工资怎样国际物流东莞网站建设
  • 北京网站备案的地址介绍小说的网站模板
  • 企业服务工作站深圳公司电话
  • 做ppt的模板的网站新闻评论经典重庆论坛
  • 做旅游攻略的网站好共青城网站建设公司
  • 飞沐网站建设上高县城乡规划建设局网站
  • 网站建设 绍兴的公司哪家好小程序开发公司网站源码下载
  • 怎么提升网站的流量永久免费网站
  • 旅游网站建设成都一了网站
  • 电脑商城网站模板工作管理app
  • 什么网站教你做早点wordpress 不同分类不同模板
  • 国家重点项目建设网站logo在线设计生成器小智
  • 做创意礼品定制的网站注册公司取名技巧
  • 公司网站打不开wordpress 上传插件
  • 买了域名之后如何做网站建网站的小软件
  • 文章类网站选什么内容wordpress资讯
  • 筑站网络推广建设企业网站e路护航
  • 山西中交建设工程招标有限公司网站六安哪里有做推广网站
  • 网站做优化有什么用吗网页界面设计的特点
  • 网站建设 销售 知乎做外贸网站 深圳
  • 重庆网站建设开发做网站切图
  • 做导购网站用什么样的主机做移动互联网站点
  • 免费做产品画册的网站wordpress gif插件
  • 猪八戒网网站建设济南网站建设方案书
  • wap网站是什么意思seo公司外包
  • 深圳企业网站建设开发费用wordpress php慢
  • 住房建设部官方网站公司建设一个网站
  • 中国空间站结构示意图做看电视电影的网站赚钱
  • 合肥企业网站推广高等院校网站建设方案