第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. 查看Oracle的表中有哪些索引

    用user_indexes和user_ind_columns系统表查看已经存在的索引 对于系统中已经存在的索引我们可以通过以下的两个系统视图(user_indexes和user_ind_columns ...

  2. Hazelcast 内存数据网格

    Hazelcast ( www.hazelcast.com)是一种内存数据网格 in-memory data grid,提供Java程序员关键任务交易和万亿级内存应用. Hazelcast的集群属于“ ...

  3. springboot整合JPA创建数据库表失败

    org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table t_s ...

  4. 解读tensorflow之rnn 的示例 ptb_word_lm.py

    这两天想搞清楚用tensorflow来实现rnn/lstm如何做,但是google了半天,发现tf在rnn方面的实现代码或者教程都太少了,仅有的几个教程讲的又过于简单.没办法,只能亲自动手一步步研究官 ...

  5. Linux Shell编程第4章——sed和awk

    目录 sed命令基本用法 sed命令实例 命令选项 文本定位 编辑命令 awk编程模型 awk编程实例 1.awk模式匹配 2.记录和域 3.关系和布尔运算符 4.表达式 5.系统变量 6.格式化输出 ...

  6. python之路 堡垒机paramiko

    paramiko 1.安装 pip3 install paramiko 二.使用 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建S ...

  7. Kotlin学习记录1

    参考我的博客:http://www.isedwardtang.com/2017/09/02/kotlin-primer-1/

  8. jQuery焦点图插件

    在线演示 本地下载

  9. win10安装z3求解器

    因为课程要求,我不得不接触求解器,之前有在ubuntu上装过一个叫stp的求解器,没怎么用: 今天在我的电脑(win10)上上装了一款更方便的求解器---z3,下面先详细介绍一下怎么安装和配置: 1. ...

  10. 定制kali linux

    Kali Linux Ps: Kali发布撸~ 写了个如此装13的标题.这是一个Guide… 都是些基本操作撸.定制为王实推 ArchLinux.  各位看官继续………………………………………号外.L ...