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

定制网站开发方案/网络营销方案案例范文

定制网站开发方案,网络营销方案案例范文,丰宁县有做网站的吗,地产政策最新消息1. 什么是生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且, 创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素&…

1. 什么是生成器

  通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且, 创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后 面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否 可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。

在 Python中,这种一边循环一边计算的机制,称为生成器:generator。

2. 创建生成器方法1

要创建一个生成器,有很多种方法。第一种方法很简单,只要把一个列表生成式的 [ ] 改成 ( )

#列表生成式(列表推导式)
l = [i for i in range(0,10,2)]
print(l)
# 生成器
g = (i for i in range(0,10,2))
print(g)

结果为:

[0, 2, 4, 6, 8]
<generator object <genexpr> at 0x00000000029B2BF8>

创建 L 和 G 的区别仅在于最外层的 [ ] 和 ( ) , L 是一个列表,而 G 是一个生成器。我们可以直接打印 出L的每一个元素,但我们怎么打印出G的每一个元素呢?如果要一个一个打印出来,可以通过 next() 函数 获得生成器的下一个返回值:

print(next(g)) # 0
print(next(g)) # 2
print(next(g)) # 4
print(next(g)) # 6
print(next(g)) # 8
print(next(g)) # StopIteration

生成器保存的是算法,每次调用 next(G) ,就计算出 G 的下一个元素的值,直到计算到最后一个元素, 没有更多的元素时,抛出 StopIteration 的异常。

可以使用 for循环取出每个元素,这样就不会报错,

for i in g: # g是一个生成器,可以直接循环print(i)

结果为: 这样也不用担心会取不到值而报错

0
2
4
6
8

3.创建生成器方法2

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,还可以 用函数来实现。

比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加 得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:

def fib(times):a = 0b = 1n = 1while n<=times:print(b)a,b = b,a+bn+=1
fib(7)

结果为:

1
1
2
3
5

仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算 出后续任意的元素,这种逻辑其实非常类似generator。 也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就 可以了:

#生成器写法
def fib(times):a = 0b = 1n = 1while n<=times:#print(b)yield ba,b = b,a+bn+=1return "done!"

简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普 通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一 个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的 本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。 同样的,把函数改成generator后,我们基本上从来不会用 next() 来获取下一个返回值,而是直接使用 for 循环来迭代:

for i in F:print(i) #结果与上面相同

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值, 必须捕获StopIteration错误,返回值包含在StopIteration的value中:

while True:try:print(next(F))except StopIteration as e:print("生成器返回值:%s"%e.value)break

总结:

生成器是这样一个函数,它记住上一次返回时在函数体中的位置。

对生成器函数的第二次(或第 n 次) 调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。

生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只 是数据值)中的位置。

生成器的特点:

1. 节约内存

2. 迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参 数都是第一次所调用时保留的,而不是新创建的

http://www.lbrq.cn/news/1623403.html

相关文章:

  • 公司建立网站青岛电话/武汉seo工作室
  • 怎么做网站icp备案/香蕉和忘忧草对焦虑的影响
  • 对网站做综合搜索引擎优化分析/珠海seo推广
  • 淘宝网站开发者/宁德市旅游景点大全
  • 企业网站建设公司排名/给你一个网站怎么优化
  • 做网站绿色和什么颜色搭配/制作网站需要什么软件
  • 武汉最好的网站建设前十/一键免费生成网页的网站
  • 网站开发技术构架/企业网站营销的优缺点
  • 公司网站维护一年多少钱/网站权重一般有几个等级
  • wordpress插件安装教程视频/惠州seo整站优化
  • 吉林省干部网络培训学院官网/新乡seo网络推广费用
  • 微信营销案例ppt/搜索引擎优化的含义
  • 国内域名服务商/北京优化推广
  • 优化网站的公司/深圳网站建设推广方案
  • 永久免费云服务器无需注册/seo推广公司教程
  • 永兴县人民政府门户网站/品牌推广策略分析
  • 沈阳网站制作公司和服务器/关键词优化骗局
  • 给客户做网站 客户不付尾款/软文广告300字范文
  • 南岗哈尔滨网站建设/合肥seo推广公司
  • 营销优化型网站怎么做/seo整站优化系统
  • wordpress大前端增强版/厦门百度推广排名优化
  • 网站建设整改实施方案/app营销
  • 湖北网络建设公司网站/推广产品的方法和步骤
  • 郑州网站开发公司/lol关键词查询
  • 今日头条入口/西安关键词seo
  • wordpress文章页面模板/宁波谷歌seo推广公司
  • 淘宝关键词搜索工具/张北网站seo
  • 可以做片头的网站/做网页用什么软件好
  • 贵阳网站建设蜜蜂/百度手机助手app下载官网
  • 哪些网站可以接点私活做的/爱站数据
  • python的进程、线程、锁
  • SeeMoE:从零开始实现一个MoE视觉语言模型
  • Mybatis_4
  • 鱼皮项目简易版 RPC 框架开发(二)
  • 【大模型LLM】梯度累积(Gradient Accumulation)原理详解
  • Qt:盒子模型的理解