Python基础,map/reduce

from functools import reduce#reduce函数在python3的内建函数移除了,放入了functools模块
#map()
list1 = [1,2,3,4,5,6,7,8,9]
def map1(x):
    return x * x
list2 = list(map(map1,list1))#map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list
#print(list2)#[1, 4, 9, 16, 25, 36, 49, 64, 81]

arr = list(map(str,list1))
#print(arr)#['1', '2', '3', '4', '5', '6', '7', '8', '9']

#reduce()
numbers = [1,2,3,4,5,6]
def add(x,y):
    return x + y
#print(reduce(add,numbers))

#字符串数字转换成整数数字
def int2str(s):
    dict1 = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9} 
    map1 = list(map(lambda x:dict1[x],s))
    return reduce(lambda x,y:x*10+y,map1)
#print(int2str('123'))#关键字lambda表示匿名函数,冒号前面的x表示函数参数,匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果

list2 = ['abc','Abc','aBc']
def lower1(arr):#利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
    def f1(x):
        str1 = ''
        for key,value in enumerate(x):
            # print(key,'---',value)
            if key == 0:
                str1 += value.upper()
            else:
                str1 += value.lower()
        return str1
    l = list(map(f1,arr))
    return l
#print(lower1(list2))#['Abc', 'Abc', 'Abc']

#print(sum(list1))#sum()函数可以接受一个list并求和

list3 = [1,2,3]
def prod(arr):#prod()函数,可以接受一个list并利用reduce()求积
    def f1(x,y):
        xy = x * y
        return xy
    return reduce(f1,arr)
print(prod(list3))