1.生成器

通过列表⽣成式,我们可以直接创建⼀个列表。但是,受到内存限制,列表容量肯定是有限的。⽽且,创建⼀个包

含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后⾯绝⼤多数元素占
⽤的空间都⽩⽩浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推
算出后续的元素呢?这样就不必创建完整的list,从⽽节省⼤量的空间。在Python中,这种⼀边循环⼀边计算的机
制,称为⽣成器:generator。

创建生成器的方法很多,第一种:将列表生成器最外一层的中括号,改为小括号,即元组生成式

# 生成器方法1,即元组生成式
list1 = [i for i in range(1, 11)]
print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2 = (i for i in range(1, 11)) # 生成器对象,generator
print(list2) # <generator object <genexpr> at 0x000002A1E3F75740>

第二种:通过yield函数创建生成器,如下代码通过斐波拉契例子对第二种方法充分认识

# 使用yield函数创建生成器
def test1(times): # 有限斐波拉契
a, b = 0, 1
n = 0
while n < times:
yield b # 创建生成器:返回后面变量值给生成器
     # temp = yield b
     # print(temp) 会打印None,这两步无效操作
     a, b = b, a+b
     n += 1
     return 'done'

打印生成器中的元素可以通过,next()函数,生成器__next__()方法,也可以通过for循环打印,还有send,注意打印生成器是通过游标,打印下个元素,只能往后不能倒退。其次,使用next,__next__()会抛出异常(原因:会记录游标位置),for不会报错。

# 第一种方法打印情况
list1 = (i for i in range(1, 11))
print(list1)
print(next(list1))
print(list1.__next__())
for i in list1:
print(i)

打印结果如下:

python高阶编程(一)的更多相关文章

  1. Python高阶函数及函数柯里化

    1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...

  2. Python高阶用法总结

    目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: ...

  3. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

  4. Python高阶函数_map/reduce/filter函数

    本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...

  5. python——高阶函数:高阶函数

    python高阶函数 00初识高阶函数 一等公民 函数在python中是一等公民(First-Class Object),同样和变量一样,函数也是对象,只不过是可调用的对象,所以函数也可以作为一个普通 ...

  6. python高阶函数的使用

    目录 python高阶函数的使用 1.map 2.reduce 3.filter 4.sorted 5.小结 python高阶函数的使用 1.map Python内建了map()函数,map()函数接 ...

  7. python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...

  8. Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速

    Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...

  9. Python高阶函数map、reduce、filter、sorted的应用

    #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...

  10. Python: 高阶函数与lambda表达式

    缘由: python语法简单一看就会,但用在实处,想因为少于实战,总感觉有些捉襟. 翻阅跟踪youtube_dl源码,看到filter()函数用法,及其中lambda表达式,感觉好有意思,就补下课,记 ...

随机推荐

  1. Finance财务软件(权限管理专题)

    我们支持按模块对用户授权 如上所示,我们对用户test进行授权.test登录系统后将看不到未授权的菜单:

  2. mathcurve.com

    https://mathcurve.com/surfaces.gb/surfaces.shtml

  3. adobe 色轮

    https://color.adobe.com/zh/create/color-wheel

  4. class声明中初始化静态成员变量的问题

    1. const静态变量,允许整型或枚举类型成员直接初始化. 2. constexpr静态变量,允许literal类型成员直接初始化. 3. c++17引入inline变量,允许其他类型成员直接初始化 ...

  5. dp泄露

    DP泄露 选了三道与RSA的dp泄露有关的题,dp泄露算是比较有辨识度的题型. 目录 DP泄露 原理 ctfshow funnyrsa3 分析 解答 BUUCTF RSA2 分析 解答 [羊城杯 20 ...

  6. Elasticsearch集群部署和运维命令

    Elasticsearch集群部署 下载tar包 在"https://www.elastic.co/cn/downloads/elasticsearch"页面,有 past rel ...

  7. Java数组之冒泡排序【重点】

    冒泡排序 冒泡排序是最为出名的排序算法之一,总共有八大排序! 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较. 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2). ...

  8. centos-7实现批量ping

    批量ping 脚本 新接手了一个项目,10多个网段,500多机器,看自己机器可以连上多少服务器,一个个ping不符合我们的作风,因此百度了下大神的脚本,按自己的风格修改了,于是有了如下的脚本. 脚本如 ...

  9. cadence报错because the library part is newer than the part in the design cache.Select the part in the cache and choose Design-Update Cache,and then place the part again.

    cadence报错because the library part is newer than the part in the design cache.Select the part in the ...

  10. win10版本eclipse安装教程——

    第一步:下载jdk,配置环境 见我第二篇博客有说明:点击即可进入 第二步:下载eclipse 点击即可进入官网下载 点击 Download Packages,进入eclipse下载页面.从 Eclip ...