python成长之路第三篇(3)_内置函数及生成器迭代器
打个广告欢迎加入linux,python资源分享群群号:478616847
目录:
1、lambda表达式
2、map内置函数
3、filter内置函数
4、reduce内置函数
5、yield生成器
6、迭代器
一丶lambda表达式
什么是lambda表达式?其实我们了解过三元运算就很容易了解lambda表达式,三元运算是来简写简单的if语句的那么lambda就是来简写简单的函数的
(1)例子下面是一个简单的函数
def f1(a):
return a+1
#这个函数只是做了简单的加法运算传入一个值,然后计算后返回值 那么用lambda表达式怎么写呢? f1 = lambda a:a+1
#只需要写这么一行就好了
正常调用方法跟正常函数调用方法一
c = f1(1)
print(c)简单函数
(2)多参数,动态参数
在正常的函数中我们发现我们传入的值是可以传入多个值的也可以写动态形参,那么对于lambda表达式也是考虑到了这么一点我们来看看下面的几个例子
#多参数
f1 = lambda a,b:a+b
c = f1(1,2)
print(c)#动态参数
f1 = lambda *a:a[0]+a[1]
c = f1(1,2)
print(c)行了接下来就不掩饰了我们来总结一些lambda表达式的特点
- 用于处理简单的逻辑
- 自动返回值
二、map内置函数
接下来我们来学习一下map函数,map函数主要用于处理序列的每一个元素,我们知道要写这样的需求我们可以使用for循环来去实现,map的内部也是这么做的下面我们来看一下
(1)使用方法1
注:在python2.7环境中返回的是一个列表而在3系版本中返回的是一个迭代器
lis = [1,2,3,4,5,6]
def f1(a):
return a+1
new_lis = map(f1,lis)
print(new_lis)使用方法一
我们来解释一下上面的代码,首先我们定义了一个列表,和一个函数,那么map函数传入的参数第一个就是fi这个函数,第二个值就是lis这个列表,所以呢map处理的方法就是讲lis的值传入函数f1处理
(2)使用方法2
如果我们有另外的需求就是想要两个或更多的列表的值进行相加那么我们可以这么写
lis1 = [1,2,3,4,5,6] lis2 = [1,2,3,4,5,6]
def f1(a,b):
return a+b
new_lis = map(f1,lis1,lis2)
print(new_lis) #注意两个列表中的值的个数要是一样的使用方法2
三、filter内置函数
filter,就是过滤他的处理方式把符合的值拿出来不符合的不要
filter(function_or_none, sequence)我们看一下这里filter接收的值可以是函数也可以是none,接着跟列表,那么filter接收none是什么效果呢
(1)使用方法1
注:在python2.7环境中返回的是一个列表而在3系版本中返回的是一个迭代器
lis = [1,2,3,4,5,6,'',False] print (filter(None,lis))#我们发现空值和false都过滤掉了由此可知None是过滤空值和假值的
(2)使用方法2
需求我们需要过滤出大于3的值就可以以下这么写
lis = [1,2,3,4,5,6]
def f1(a):
return a>3
print (filter(f1,lis))
四、reduce内置函数
reduce函数来做累积的操作,他最少接收两个值,因为进行累积需要一个数处理另一个数
使用方法:
lis = [1,2,3,4,5,6]
def f1(a,b):
return a+b
print (reduce(f1,lis))当我们也可以做其他的操作也可以
五、yield生成器
我们知道使用range(10)可以直接生成一个0到9 的列表而用xrang(10)返回的是一个迭代器,在上面的篇幅
中也提到过迭代器,那么迭代器需要使用for来取值,那么他的内部结构就是用yield来做的,也就是一次返回一个值
def f1():
for i in range(1,5):
yield i
a = f1()
print ayield
我们从这个例子发现结果不是我们想要的,是一个迭代器<generator object f1 at 0x00000000025E46C0>
那么我们用for来显示一下
def f1():
for i in range(1,5):
yield i while True:
for i in f1():
raw_input()
print i
breakyield
我们将上面的代码使用pycharm使用调试模式来看看主要这里有raw_input()在调试模式下要打开控制台输入回车哦
看下图,每次for循环就会从yield取值然后返回给下面
六、迭代器
迭代器概述
迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。
迭代器的缺点:
(1)迭代器不能回退去取原来的元素,只能往前进行迭代。(当然这个缺点也不算是什么缺点因为我们基本上不会这么做)
(2)迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一个危险的操作。
迭代器的优点:
(1)对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值,但对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式。
(2)迭代器的另一个优点就是它不要求你事先准备好整个迭代过程中所有的元素。这样在遍历一个庞大的集合时比如几个G的那么可以大大节省空间,这种特点被称为延迟计算或惰性求值(Lazy evaluation)。
使用迭代器:
(1)iter(iterable)使用内建的函数iter(iterable)可以获取迭代器对象:
lis = range(3)
it = iter(lis)
print (it)(2)使用next()方法可以访问下一个元素:
lis = range(3)
it = iter(lis)
print (it)
print (it.next(),next(it))
#第一个方法是调用迭代器内置方法,第二种方法是使用内置函数在python 2.6以上版本访问元素
当我们取完值后想要继续取值就会抛出StopIteration异常,这正是python根据是否检测到这个异常来决定是否停止迭代的Traceback (most recent call last):
File "E:/pycharm/exercise/����/labda.py", line 17, in <module>
print (it.next(),next(it),it.next(),it.next())
StopIteration
python成长之路第三篇(3)_内置函数及生成器迭代器的更多相关文章
- python成长之路第三篇(1)_初识函数
目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...
- python成长之路第三篇(2)_正则表达式
打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.什么是正则表达式,python中得正则简介 2.re模块的内容 3.小练习 一.什么是正则表达式(re) 正则表 ...
- python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作
打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-has ...
- (转)Python成长之路【第九篇】:Python基础之面向对象
一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...
- python成长之路【第二篇】:列表和元组
1.数据结构数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在Python中,最基本的数据结构是序列(sequence) ...
- 我的Python成长之路---第三天---Python基础(13)---2016年1月16日(雾霾)
五.Python的常用的内置函数 Python为我们准备了大量的内置函数,如下图所示 这里我们只讨论红框内的内置函数 abs(x) 返回一个数的绝对值(模),参数可以是真说或浮点数 >>& ...
- Python小白学习之路(十六)—【内置函数一】
将68个内置函数按照其功能分为了10类,分别是: 数学运算(7个) abs() divmod() max() min() pow() round() sum() 类型转换(24个) bo ...
- python基础-第四篇-4.1内置函数
lambda表达式 lambda表达式是对简单函数的精简化表达 语法结构:函数名 = lambda:运算表达式 def f1(a): a = a + 1 return a ret = f1(1) pr ...
- 【Python】从简单案列中揭示常用内置函数以及数据类型
前面提到了BIF(内置函数)这个概念,什么是内置函数,就是python已经定义好的函数,不需要人为再自己定义,直接拿来就可以用的函数,那么都有哪些BIF呢? 可以在交互式界面(IDLE)输入这段代码, ...
随机推荐
- JavaScript权威指南阅读笔记3
第六章 对象 1.首先是先介绍了对象直接量的格式:对象直接量就是1.由若干个名/值对组成的映射表,2名/值对中间由冒号分割,3名值对之间由逗号分割,4整个映射表由花括号括起来.这样就组成了一个对象直接 ...
- 视听说加速器--AHK辅助工具
大学有视听说这门课,看起来这门课设计得非好,可是对大多数人来讲却不能按时完成.到了最后都要抓紧提速,上网找答案,辛苦的抄,有“聪明者”便找加速器来做. 我也是赶着做的人之一.抄答案太累,加速器太卡,还 ...
- information_schema.partitions 学习
1.partitions 表中的常用列说明: 1.table_schema:表所在的数据库名 2.table_name:表名 3.partition_method:表分区采用的分区方法 4.parti ...
- joseph-约瑟夫环问题
约瑟夫环运作如下: 1.一群人围在一起坐成环状(如:N) 2.从某个编号开始报数(如:K) 3.数到某个数(如:M)的时候,此人出列,下一个人重新报数 4.一直循环,直到所有人出列,约瑟夫环结束 关于 ...
- Clojure操作mysql
在Eclipse中新建一个Clojure工程clj01 clojure 操作mysql需要依赖mysql-connector-java.clojure-contrib与java.jdbc三个jar包. ...
- 为什么选择使用 Dropbox 而不是其他品牌同步工具(不要加上多余的功能,要极致和专注)
作者:吴锋链接:http://www.zhihu.com/question/19646859/answer/14707821来源:知乎著作权归作者所有,转载请联系作者获得授权. 窃以为楼主的问题,准确 ...
- MFC修改任务栏图标及程序运行exe图标
修改左上角的图标和任务栏里图标 在对话框构造函数中 1 CTestDlg::CTestDlg(CWnd* pParent )2 : CDialog(CTestDlg::IDD, pParent)3 { ...
- 不重启mysqld更改root密码
Ever found yourself working on a MySQL server where root’s password is unavailable? It has happened ...
- wget命令1(转载)
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- 使用 apache ant 轻松实现文件压缩/解压缩(转)
原文地址:http://blog.csdn.net/irvine007/article/details/6779492 maven配置ant包: <dependency> <grou ...
