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. wake on lan sender 2.0.8

    局域网 远程关机

  2. centos7普通用户拥有root权限并登录执行脚本

    1.useradd test 2.passwd test 3.usermod -s 脚本绝对路径 test 4.vi /etc/passwd修改test用户的uid和gid为0

  3. SQL Server【提高】事务

    事务 事务是作为单个逻辑单元执行的一系列操作,它是一个不可分割的工作逻辑单元.它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 特性 原子性Atomicity 事务是一个完整的操作, ...

  4. 慢SQL

    慢SQL 目录 慢SQL 一.慢SQL概念 2.参数 3.配置 3.1.slow_query_log 3.2.slow_query_log_file 3.3.long_query_time 3.4.l ...

  5. C语言学习--常量指针与指针常量

    指针常量 #include<stdio.h> #include<string.h> //常量指针:是一个指针, 定义不用初始化, 能改变指向,但是指向的内容不能被修改 cons ...

  6. idea安装破解

    转 一般都会去官网下载,官网地址IntelliJ IDEA,官网上对于不同的操作系统(windows,macOS,Linux)都有两个版本可供下载 3|0安装 确认已经安装好了 JDK ,每个IDEA ...

  7. 打卡node day02--url qs 内置模块

    node 内置模块 url [官网链接:http://nodejs.cn/api/url.html] 1.url.parse() 2.url.format() 内置模块Query String 查询字 ...

  8. ant Vue select 多条数据重复的问题

    1.问题描述:select实现下拉的功能,并且带前端搜索,但是后端给的数据没去重,对象中所有的参数值有保持一致,试了下,发现只要key值和value值不一致就不会报错: 2.解决:key值用index ...

  9. SEO高质量外链怎么做?

    其实seo是一个很枯燥的东西,说技术也没有什么技术可言 1.你需要每天坚持更新你的网站,坚持写软文 2.你需要每天发外链,而且有质量的外链 3.你需要每天交换友情链接来增加网站的权重名 4.你需要每天 ...

  10. jquery语言中获取input标签后如何给input标签添加disabled的属性

    jquery语言中获取input标签后如何给input标签添加disabled的属性 1.使用JQuery函数prop():$("input").prop("disabl ...