python语法笔记(二)
1. 循环对象
循环对象是一类特殊的对象,它包含一个next()方法(在python3中是 __next__()方法),该方法的目的是进行到下一个结果,而在结束一系列结果之后,举出 StopIteration错误。
当一个循环结构(比如for)调用循环对象的时候,它就会每次循环的时候调用 next()方法,直到 StopIteration出现,for循环接收到 StopIteration,就知道循环结束,停止调用next().比如:
f = open('1.txt')
f.next()
f.next()
...
open()实际返回一个循环对象,不断输入 f.next(),直到遇到 StopIteration
以上使用next()方法手动循环对象,可以自动的进行:
for lin in open('1.txt')
print line
for循环结构自动调用 next()方法,将该方法的返回值赋予给line。循环知道出现 StopIteration的时候结束。
相对于序列,使用循环对象的好处在于:不用在循环还没开始的时候,就生成好要使用的元素。所使用元素
可以在循环的过程中逐渐生成,类似 迭代器。
2. 迭代器
从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器。这一转换是通过iter()函数实现的,在逻辑层面上常常忽略这一点,所以循环独享和迭代器常常相互指代。
3.生成器
生成器可以构造一个用户自定义的循环对象。生成器的编写方法和函数定义类似,只是在return的地方改为 yield。生成器中可以有多个yield,当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一次yield。生成器自身构成一个循环器,每次循环使用一个yield返回的值。
def gen():
a = 100
yield a
a = a*8
yield a
yield 1000 for i in gen():
print i def gen():
for i in range(4):
yield i 或者可以写成生成器表达式
G = (x for x in range(4))
4.表推导
表推导是快速生成表的方法,它的语法简单,很有实用价值。
假设我们生成表L:
L = []
for x in range(10):
L.append(x**2) 使用表推导表达式可以很方便的写为:
L = [x**2 for x in range(10) ]
这和生成器表达式类似,只不过使用的是中括号。
注意生成器表达式和表推导的区别,圆括号 vs 中括号:
#生成器表达式
G = (x for x in range(4)) #表推导
L = [x**2 for x in range(10)]
5. lambda函数
func = lambda x, y: x+ y
print func(3,4)
lambda 函数是一种匿名函数,可以在代码中封装一些常用的操作代码,而不需要显式的定义函数。
6. 函数作为参数传递
函数可以作为一个对象,进行参数传递。函数名即为该对象,比如说:
def test(f, a, b):
print 'test'
f(a, b) test(func, 3, 4)
#func为一个函数,作为一个参数,传递给函数test 也可以将一个lambda表达式作为参数传递给函数:
test((lambda x, y: x**2 + y), 6, 9)
7. map函数
map()是python的内置函数,它的第一个参数是一个函数对象。
re = map((lambda x:x + 3), [1,3,4,5])
这里参数1为lambda定义的函数对象,参数2为一个包含多个元素的表。map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果存储于返回的表re中。map是通过读入的函数来操作数据。
如果作为参数的函数对象有多个参数,可以使用下面的方式,向map()传递函数参数的多个参数:
re = map((lambda x, y: x + y), [1,2,3], [6,7,8])
map()将每次从两个表中分别取出一个元素,带入lambda所定义的函数。
在python3中,map()返回值不是一个表,而是一个循环对象。
8. filter函数
filter()和map()类似,将作为参数的函数对象作用于多个元素。如果函数对象返回的为True,则该次的元素被存储于返回的表中。filter通过读入的函数来筛选数据。在python3中,filter返回的不是表,而是循环对象。
def func(a):
if a > 100:
return True
else:
return False print fileter(func, [10, 56, 101, 100])
9. reduce函数
reduce函数的第一个参数也是函数对象,但是该函数自身能接受两个参数。reduce可以累进的将函数作用于各个参数。如:
print reduce((lambda x, y: x + y), [1,2,3,4])
第一个参数为lambda表达式,接受两个参数x,y,返回x+y
reduce将表中的前两个元素1,2传递给lambda函数,得到3。该返回值3将作为lambda函数的第一个参数,而表中得下一个元素3作为lambda函数的第二个参数,进行下一次对lambda函数的调用,得到6,最后得到10.直到表中没有剩余的元素。
参考:
http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html
python语法笔记(二)的更多相关文章
- Python 学习笔记二
笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...
- python语法笔记(四)
1.对象的属性 python一切皆对象,每个对象都可能有多个属性.python的属性有一套统一的管理方案. 属性的__dict__系统 对象的属性可能来自于其类定义,叫做类属性:还可能 ...
- python学习笔记(二)、字符串操作
该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...
- python学习笔记(二)---for循环与操作列表
内容概要 for循环 range(start,end,step)函数 生成随机数列表 list()函数 将range()的结果整合到某个列表 列表的操作 切片(start: end :step) 元组 ...
- python语法(二)— 判断
昨天简单的学习了一些python的一些简单的语句与python的数据类型,今天继续学习python的基础语句 if 语句. 一.if 语句 if 语句语法 if expression: ifSuite ...
- python语法笔记(三)
1. 动态类型 python的变量不需要声明,在赋值时,变量可以赋值为任意的值.这和Python的动态类型语言相关. python对象是存在于内存中的实体,代码中写对象名,只是指向该对象的引用.引用和 ...
- Python面试笔记二
一.算法 1.归并排序 2.快速排序 3.算法复杂度 4.哈希表数据结构 二.数据库 1.设计一个用户关注系统的数据库表 1.设计一个用户关注系统的数据库表,写三个相关的SQL语句两张表,一张user ...
- Python学习笔记二
---恢复内容开始--- 一. python几种数据类型的比较. 从以下几个方面比较: 1. 是否可变. 不可变类型:变量的值可以发生变化,id也变了,相当于创建了一个新的对象,所以一修改值,id就变 ...
- Python 语法笔记
1.else与while结合 while a>0: pass else: pass #当a<=0时执行 2.with语法,无需关闭文件,python自动关闭 with open('a.tx ...
随机推荐
- HTML5视频标签video
现阶段,我们要在网页中嵌入视频的最可靠最常用的办法是使用Flash,通过使用<object>和<embed>标签,就可以通过浏览器播放swf,flv等格式视频文件,但是前提是浏 ...
- HDU How many integers can you find 容斥
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Java提高篇---TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...
- 2016年11月14日 星期一 --出埃及记 Exodus 20:5
2016年11月14日 星期一 --出埃及记 Exodus 20:5 You shall not bow down to them or worship them; for I, the LORD y ...
- C#窗体四边框阴影效果的实现
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- NOI剑客决斗
http://acm.nyist.net/JudgeOnline/problem.php?pid=110 剑客决斗 时间限制:5000 ms | 内存限制:65535 KB 难度:5 描述 在 ...
- 最小化安装centos的init初始化脚本
#!/bin/bash #this script is appropriate .x(这脚本适合最小化安装6.x版本的系统) #you have already install the os read ...
- 利用JAVA Service Wrapper把JAVA程序做成windows服务
今天做了一个读取数据入库的程序.由于读取的数据每天都更新,于是就想把程序做成一个服务,每天定时执行.研究了一下,发现有几种方式可以做.下面我主要记录一下JAVA Service Wrapper方式. ...
- 【leetcode❤python】 38. Count and Say
#-*- coding: UTF-8 -*- class Solution(object): def countAndSay(self, n): """ ...
- Cheatsheet: 2013 07.21 ~ 07.31
Mobile Android vs. iOS: Comparing the Development Process of the GQueues Mobile Apps Android Studio ...