第6课

1、循环对象:包括一个next方法,这个方法的目的是进行到下一个结果,结束后抛出StopInteration异常;

当循环结构如for循环调用一个循环对象时,每次循环的时候都会调用next方法,知道最后抛出StopInteration异常,循环结构知道结束,停止调用next方法。

如:

 #text.txt内容为
123
123
123
for line in open('text.txt'):
print line

open方法返回的是一个循环对象,包含next方法,for循环自动调用next方法,直至出现StopInteration异常。

用循环对象的好处在于:不用在循环还没有开始的时候,就生成好要使用的元素。所使用的元素可以在循环过程中逐次生成。这样,节省了空间,提高了效率,编程更灵活。

2、迭代器:

从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器(iterator)。这一转换是通过使用iter()函数实现的。但从逻辑层面上,常常可以忽略这一层,所以循环对象和迭代器常常相互指代对方。

3、生成器:

构造一个用户自定义的循环对象

1)生成器的定义方法和函数定义类似,只是在return的地方换成yield;

2)生成器中可以有多个yield,当生成器遇到一个yield,会暂停运行生成器,返回yield后面的值;当再一次调用生成器时,会从刚才的地方继续执行,直到遇到下一个yield;

3)生成器本身是一个循环器,每次循环返回一个yield后面的值

下面是一个生成器:
def gen():
a = 100
yield a
a = a*8
yield a
yield 1000
#该生成器有3个yield,用作循环器时,会进行3轮循环
for i in gen():
print i
 def gen():
for i in range(4):
yield i

这段代码还可以写成生成器表达式(Generator Expression):G = (x for x in range(4));生成器表达式是生成器的一种简单编写方式

4、表推导(list  comprehension):是快速生成表(list)的方法。

假如要生成表:

L = []
for i in range(4):
L.append(i**2)

还有更简单的方法,即:表推导的方法

 L = [x**2 for i in range(4)]

练习题:

 x1 = [1,3,5]
y1 = [9,12,13]
L = [x**2 for (x,y) in zip(x1,y1) if(y)>10]
L = [9,25]

第7课:函数对象

函数(function)也是一个对象,函数也有属性和方法,不仅可以赋值给其它对象名,还可以作为参数传递。

1、lambda函数:定义1个函数

 func = lambda x,y:x+y
print func(3,4) 等价于
def func(x,y):
return x+y
print func(3,4)

lambda生成1个函数对象,参数为x,y,返回值为x+y,函数对象的值赋给func

2、函数作为参数传递

函数可以作为对象,进行参数传递,函数名即为对象:

def  test(f,a,b):

  print 'test'

  print f(a,b)

func = lambda x,y:x+y

test(func,1,2)

test函数的第一个参数就是一个函数对象,将func赋值给f,也可以这样写:test((lambda x,y:x+y),1,2)

3、map函数:格式:map( func, seq1[, seq2...] ),是Python的内置函数,第一个参数是一个函数对象,第二、第三个。。。是数列。

map函数的作用是:将函数对象作用于后面的数列的每一个元素,将每次作用的结果存储在数列中(在Python 3.X中,map()的返回值是一个循环对象。可以利用list()函数,将该循环对象转换成表。)

如下:

re = map((lambda x:x+3),[1,2,3])
print re def func(x,y):
return x**2,y**2
re = map(func,[1,2,3,4],[2,3,4,5])
print re 输出:
[4,5,6]
[(1,4),(4,9),(9,16),(16,25)]

4、filter函数:第一个参数也是函数对象,将函数对象作用于后面数列的每一个元素,如果函数对象返回的是True,则该次的元素储存于返回的数列中,filter函数通过函数对象来筛选数据(同理在Python3.x中 filter返回的不是list,还是循环对象),如下例子所示:

 def func (x):
if x>100:
return True
else:
return False
ru = filter(func,[100,104,99,101,123])
输出:
[104, 101, 123]

PS:filter函数最多2个参数,1个函数对象,1个数列,不像map函数可以有多个数列参数。

5、reduce函数:格式:reduce( func, seq[, init] ),第一个参数也是函数对象,且要求它能接受2个参数,然后每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。在reduce函数中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。返回多次迭代后的结果,如下例子所示:

 m = 2
n = 5
print reduce(lambda x,y:x*y,range(1,n+1)) #
print reduce(lambda x,y:x*y,range(1,n+1),m) #240 相当于((((2*1)*2)*3)*4)*5,2为init元素

PS:reduce()函数在3.0里面不能直接用的,它被定义在了functools包里面,需要引入包。

Python基础学习(第7天)的更多相关文章

  1. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  2. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  3. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

  4. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  5. (一)python基础学习

    根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...

  6. python基础学习(起步)

    目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...

  7. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  8. Python基础学习一

    Python基础学习一 1.变量与常量 变量名:大小写英文.数字.下划线的组合,数字不能开头 常量名:习惯上常量用大写字母命名,例如"PI" 2.多行输出 转义符:反斜杠(),如果 ...

  9. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

  10. Python基础学习四

    Python基础学习四 1.内置函数 help()函数:用于查看内置函数的用途. help(abs) isinstance()函数:用于判断变量类型. isinstance(x,(int,float) ...

随机推荐

  1. django 中模板语言的各种用法

    模板 1.视图中使用模板 模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户 1.普通方法:HTML被直接硬编码在 P ...

  2. Redis一(Redis-py与String操作)

    Redis 介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  3. Library Cache优化与SQL游标

    Library Cache主要用于存放SQL游标,而SQL游标最大化共享是Library Cache优化的重要途径,可以使SQL运行开销最低.性能最优. 1 SQL语句与父游标及子游标 在PL/SQL ...

  4. SHELL —— BASH环境

    一 .什么是SHELL shell一般代表两个层面的意思,一个是命令解释器,比如BASH,另外一个就是shell脚本.本节我们站在命令解释器的角度来阐述shell 二 .命令的优先级 命令分为: == ...

  5. FileZilla Server IP限制设置

      上面那个是黑名单. * 代表所有   下面那个是白名单. 多个是用 空格 分割

  6. http post url参数封装(key token 及校验码)

    post请求本来是一种很常见的web请求方式,相信许多项目都有一系列的封装工具类. 今天遇着一个特殊的需求. 需要在post的请求url内封装相应的token 与及key相关的值,这就奇怪了,url封 ...

  7. python进阶——进程/线程/协程

    1 python线程 python中Threading模块用于提供线程相关的操作,线程是应用程序中执行的最小单元. #!/usr/bin/env python # -*- coding:utf-8 - ...

  8. CROS跨域 解决方案 之 tomcat 做过滤处理解决

    摘自:http://www.cnblogs.com/liuwenhao-1/articles/6963540.html 1 .在项目中常常遇到本地访问服务器上的链接数据访问不到,并出现如下问题: 这是 ...

  9. 理解 $nextTick 的作用

    有同学在看 Vue 官方文档时,对 API 文档中的 Vue.nextTick 和 vm.$nextTick 的作用不太理解. 其实如果看一下深入响应式原理 - vue.js中的有关内容,可能会有所理 ...

  10. 在非小细胞肺癌中,MET基因的14号外显子突变和年龄,依赖于癌症阶段的CNV,C-MET过表达的关系

    背景:c-MET是肝细胞生长因子的酪氨酸激酶受体.MET 14号外显子编码部分c-MET的胞内跨膜结构域,包括重要的调节原件,比如酪氨酸1003,一个降解c-MET的相关酶的结合位点. 拥有MET 1 ...