标签:return logs code iterator 返回 iter highlight tool python
map
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
即map(函数,Iteratable)
map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
>>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r) [1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方说对一个序列求和,就可以用reduce实现:
>>> from functools import reduce >>> def add(x, y): ... return x + y ... >>> reduce(add, [1, 3, 5, 7, 9]) 25
基础语法就是这么多了,下面看一下实战。
作业:
利用map和reduce编写一个str2float函数,把字符串‘123.456‘转换成浮点数123.456:
代码:
>>> def str2float(s):
... def char2num(c):
... return {‘0‘:0,‘1‘:1,‘2‘:2,‘3‘:3,‘4‘:4,‘5‘:5,‘6‘:6,‘7‘:7,‘8‘:8,‘9‘:9}[c] #返回一个dict
... if not ‘.‘ in s: #没有小数点
... return reduce(lambda x,y:x*10+y,map(char2num,s))
... spt=s.split(‘.‘) #分割为两部分
... spt[1]=‘0‘+spt[1] #加上0才能化为0.xxx的形式,不然会是x.xxx的形式
... return reduce(lambda x,y:x*10+y,map(char2num,spt[0]))+reduce(lambda x,y:x*0.1+y,map(char2num,spt[1][::-1])) #倒着隔一个取
...
>>> print(‘str2float(\‘123.456\‘) =‘, str2float(‘123.456‘))
str2float(‘123.456‘) = 123.456
标签:return logs code iterator 返回 iter highlight tool python
原文地址:http://www.cnblogs.com/lzh0108/p/7783980.html