print ("--------------------分割线------------------")
'''
map()函数接收两个参数,一个是函数,一个是Iterable。map将传入的函数依次
作用到序列的每个元素,并把结果作为新的Iterator返回。
'''
from collections import Iterator
def func(x):
return x * x
list_a = [ x for x in range(1,8) ]
print( list_a )
map_t = map( func, list_a )
print( isinstance(map_t, Iterator) )
print( next(map_t), next(map_t) )
for val in map_t:
print( val, end=' ' )
print()
'''
map()传入的第一个参数是func,即函数对象本事。由于结果map_t是一个
Iterator,Iterator是惰性序列,因此通过next()函数和for循环把整个序列
计算出来
for循环也可以实现整个列表的平方,但没有map()简单清晰明了。map作为高阶
函数,事实上它把运算规则抽象了。
'''
print( list( map(str, [1,2,3]) ) )
print ("--------------------分割线------------------")
'''
reduce 把一个函数作用在一个序列[1, 2, 3]上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(func, [x1, x2, x3]) = func(func(x1, x2), x3)
'''
from functools import reduce
def func_add(x, y):
return x + y
print( reduce(func_add, [1, 2, 3, 4]) )
from functools import reduce
def func2(x, y):
return x*10 + y
def char2num(s):
digits={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return digits[s]
print( reduce(func2, map(char2num, '13456')) )
from functools import reduce
DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,\
'5':5,'6':6,'7':7,'8':8,'9':9}
def str2int(s):
def func3(x, y):
return x*10 + y
def char2num(s):
return DIGITS[s]
return reduce(func3, map(char2num, s))
print( str2int('120030') )
def Str2Int(s):
return reduce(lambda x,y:x*10+y, map(char2num,s))
print( Str2Int('120030') )
print ("--------------------分割线------------------")
L1 = ['adam', 'LISA', 'barT']
def normalize(s):
return s[0].upper()+s[1:].lower()
L2 = list(map(normalize, L1))
print(L2)
from functools import reduce
def prod(L):
return reduce(lambda x, y:x*y, L)
print( prod([2,3,6]) )
def str2float(s):
return reduce(lambda x,y:x*10+y,map(int,s.replace('.','')))/10**s.find('.')
print( str2float('123.456') )