#!/usr/bin/env python
#coding=UTF-8
#包含一个next()方法 每次循环调用next()
#直到StopIteration异常出现 停止调用next()方法
f = open('test.txt')
for line in f:
print line
#生成器 自定义一个循环对象
#定义与函数类似 只是return改为yield
#每次循环使用一个yield的返回值
def gen():
a = 10
yield a
a = a**2
yield a
a = a+10
yield a
yield 525
#该生成器共有4个yield,用作循环器时,会进行4次循环
for a in gen():
print a
生成器 generator
#对于形如下的是生成器 可以简写为 G = ( x for x in range(m))
# 名为生成器表达式 (Generator Expression)
def gen():
for i in range(4):
yield i
G = (x for x in range(4))
for a in G:
print a
表推导
#表推导 list comprehension 快速生成表
#表推导的机制 实际上是利用了循环对象
L = []
for i in range(10):
L.append(i*2)
print L
#简写形式 使用中括号
L = [x*2 for x in range(10)]
print L
测试练习:
#test zip() 聚合函数
#聚合后 [(1,7),(3,12),(5,13)]
#设定y>10 所以 x取3和5. L=[6,10]
a = [1,3,5]
b = [7,12,13]
L = [x*2 for (x,y) in zip(a,b) if y > 10]
print L
2.函数对象
函数也是对象,将函数名作为参数传递
def func(a, b):
return a + b
def test(f, a, b):
print 'test'
print f(a, b)
test(func, 1, 2)
test函数的第一个参数f就是一个函数对象。将func传递给f,test中的f()就拥有了func()的功能。
map()函数
def func(a, b):
return a + b
# map()的功能是将函数对象依次作用于表的每一个元素
# 每次作用的结果储存于返回的表re中
# map()将每次从两个表中分别取出一个元素,带入所定义的函数。
re = map(func, [1, 2, 3, 4], [2, 3, 4, 5])
print re