"pythonic生物人"的第46篇分享

python3匿名函数、推导式、迭代器和生成器用法。

目录

1、匿名函数(lambda)2、推导式(comprehensions)    列表推导式    字典推导式    集合推导式3、迭代器(Iterator)    可迭代对象(Iterable)    迭代器(Iterator)    判断对象是否是可迭代对象或迭代器    迭代(Iteration)4、生成器(Generators)    ()包围列表推导式生成    自定义函数中添加yield关键字构建生成器

正文开始啦

1、匿名函数(lambda)

个人理解为一种简单的定义函数的方式,不需要使用def关键字定义函数。语法:lambda 参数:操作参数表达式。

add = lambda x, y: x + yprint(add(3, 5))

8

list(map(lambda x, y: x + y, range(-2, 2), range(1, 5)))#传入两个iterable对象range(-2, 2), range(1, 5)

[-1, 1, 3, 5]


2、推导式(comprehensions)

列表,字典和集合中都可以使用推导式。

列表推导式

一种简单创建列表的方法。

#if 语句置于for之后In [29]: [x for x in range(1, 11) if x % 2 == 0]#对于range(1, 11)中每个元素,能被2整除的输出组成新列表Out[29]: [2, 4, 6, 8, 10]

#if 语句置于for之前可以使用elseIn [30]: [x if x % 2 == 0 else -x for x in range(1, 11)]#对于range(1, 11)中每个元素,能被2整除的输出原值,不能整除的取原值负数输出,组成新列表Out[30]: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]

字典推导式

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}{k:v for k,v in mcase.items()}

{'a': 10, 'b': 34, 'A': 7, 'Z': 3}

集合推导式

{x**2 for x in [1, 1, 2]}#集合不允许重复

{1, 4}


3、迭代器(Iterator)

可迭代对象(Iterable)

python中的对象,只要具有方法__iter__和__getitem__就是可迭代对象,可迭代对象能提供迭代器。

迭代器(Iterator)

被定义了__next__方法的python对象。

判断对象是否是可迭代对象或迭代器

from collections.abc import Iterable, Iteratordef g():    yield 1    yield 2    yield 3#是否为python可迭代对象判断print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable))#isinstance()判断一个对象是否是Iterable对象print('Iterable? \'abc\':', isinstance('abc', Iterable))print('Iterable? 123:', isinstance(123, Iterable))print('Iterable? g():', isinstance(g(), Iterable))

#是否为python迭代器判断print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))#isinstance()判断一个对象是否是Iterator对象print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator))print('Iterator? \'abc\':', isinstance('abc', Iterator))print('Iterator? 123:', isinstance(123, Iterator))print('Iterator? g():', isinstance(g(), Iterator))
Iterable? [1, 2, 3]: TrueIterable? 'abc': TrueIterable? 123: FalseIterable? g(): TrueIterator? [1, 2, 3]: FalseIterator? iter([1, 2, 3]): TrueIterator? 'abc': FalseIterator? 123: FalseIterator? g(): True 

迭代(Iteration)

使用一个循环来遍历某个python对象时,这个过程就叫迭代。


4、生成器(Generators)

生成器也是一种迭代器,但是,只能对其迭代一次。这是因为它们并没有把所有的值存在内存中(可节省大量内存),而是边循环边生成值(生成器保存算法,可以计算下一个元素的值),创建生成器方法如下:

( )包围列表推导式生成

g = (x * x for x in range(10))#只迭代一次,只存储算法,不会生成所有元素存储于内存。g

at 0x000002B53772C4C0>

for i in g:#for循环打印每个生成器中元素,在执行输出nothing(只迭代一次,只存储算法)    print(i)

0149162536496481

自定义函数中添加yield关键字构建生成器

推算算法很复杂时使用自定义函数。举个例子,计算斐波那契数列的生成器。

def fibon(n):    a = b = 1    for i in range(n):        yield a#该函数为一个生成器        a, b = b, a + b for x in fibon(1000000):    print(x) #不用担心它会使用大量资源      

参考资料

https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128
Intermediate Python

同系列文章


python3基础06流程控制语句python3基础07函数(自定义)python3基础08函数(python内置)

原创不易"点赞"、"在看"励下呗

else列表推导式 if python_python3基础09列表推导式|迭代器|生成器|匿名函数相关推荐

  1. python修改列表指定位置的_Python 基础教程—列表(1)

    Python内置了多种序列,本次讨论:列表.列表是Python提供的容器型数据类型.可变并且有序. 可变 - 列表中的每个元素的值可变,列表的长度可变,列表中的顺序可变.(支持增.删.改) 有序 - ...

  2. python列表添加字符串_2.python基础之—列表,元组,字典,集合,字符串的使用方法...

    一.关于python序列的简介. python里面的序列大部分都可以执行,索引,切片,加,乘,检查长度,以及检查某个成员是否存在,甚至还可以找出这个序列中最小的元素和最大的元素,并且序列都是可迭代的. ...

  3. python删除列表一段元素_Python基础--list列表删除元素

    列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove ...

  4. python列表批量删除元素_Python基础--list列表删除元素

    列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove ...

  5. Python 列表推导式 - Python零基础入门教程

    目录 一.Python 列表推导式简介 二.Python 列表推导式语法 三.Python 列表推导式练习 1.Python 列表推导式案例一 2.Python 列表推导式案例二 3.Python 列 ...

  6. Python 字典推导式 - Python零基础入门教程

    目录 一.Python 字典推导式简介 二.Python 字典推导式语法 三.Python 字典推导式实战 1.在字典中提取或者修改数据,返回新的字典 2.在字符串中提取数据,返回新的字典 四.重点总 ...

  7. format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  8. 4.04Day14递推、三元表达式、列表/字典推导式、匿名函数

    复习:1.迭代器:不需要索引的取值方式2.生成器:通过特殊的语法自定义的迭代器3.枚举对象:为可迭代对象创建索引(按照迭代的顺序创建索引) 迭代器对象:装有多个值的容器 1. 可用通过.__next_ ...

  9. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一.三元表达式 语法:[成立1 if condition1 else成立2 if condition2 else ...if 成立N conditionN else 不成立] sex = 'man' ...

最新文章

  1. 实体链接:信息抽取中的NLP的基础任务
  2. OCS2007安装配置指南
  3. vue - resource 使用过程的坑
  4. cf不能全屏win7的解决方法_win7系统屏幕显示brightness如何解决 win7系统屏幕显示brightness解决方法【详解】...
  5. 三大角度 PK ,Go 语言和 Node.js 谁胜谁负?
  6. python异常信息中最重要的部分是_Python中获取异常(Exception)信息
  7. sublime中文件前缀的自动添加
  8. lg g2刷android8.0,lg g2线刷刷机教程(可救砖)
  9. Android修行手册-EditText属性以及光标和小键盘控制
  10. 专访Facebook HipHop作者、阿里研究员赵海平:生物与计算机交织的独特人生
  11. 基于zookeeper实现统一配置管理
  12. [渝粤教育] 宁波财经学院 金融工程学 参考 资料
  13. android 平板重装系统,平板电脑系统重装方法
  14. Unity API常用方法和类
  15. jemter使用beanshell的几种方法
  16. opencv学习笔记十八:模板匹配(cv2.matchTemplate、cv2.minMaxLoc)
  17. 陶朗集团任命新总裁兼CEO;开利完成对广东积微集团的收购;宁德时代获大众集团电芯测试实验室认证 | 能动...
  18. 训练集、验证集和测试集这三个名词的区别
  19. NZT 关于触动精灵 扫码无法识别 NZT提示202
  20. SpaceX火箭数据 API 开源,支持 Python

热门文章

  1. sys.stdout.write与sys.sterr.write(一)
  2. 设置phpMyAdmin连接本机已存在数据库
  3. 安卓适配屏幕-4.x5.x
  4. 苹果公司发布TestFlight Groups,放宽二进制版本提交限制
  5. PowerDesigner 数据建模技术视频教程
  6. [转]解决eclipse-helios中Errors running builder Java...
  7. 京东购物车双11实战
  8. LPS最长回文子序列
  9. 堆排序时间复杂度_leetcode刷题(二):排序算法(归并排序,堆排序,桶排序)...
  10. 【免费毕设】基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+lunwen)