# -*- coding: utf-8 -*- ##每日学习day10-2022/4/14 ###函数式编程 #函数式编程是一种抽象程度很高的编程。当输入确定时,输出也是确定的。 ###高阶函数 :函数名作为一个函数的参数。 #函数名也是一个变量,指向一个对应功能的函数 def addfuc(x,y,f): return f(x)+f(y) print(addfuc(1,-3,abs)) ###map/reduce #map(func,*iterables) 将iterables的每个元素,传入到func中,并返回新的Iterator l = map(abs,[1,-3,4,-5]) #l 是一个map object map函数可以方便的让每个元素都调用func print(list(l)) print(list(map(str,[1,3,5,6,'a']))) # reduce(func,*iterables) 将可变参数的元素,每两个给到func的参数,func必须是只有2个参数的函数。 def add(x1,x2): return x1+x2 from cProfile import label from functools import reduce # reduce(f,[x1,x2,x3]) f(f(f(x1,x2),x3),x4) print(reduce(add,[1,2,3,4])) # 1+2+3+4 def fn(x1,x2): return x1 * 10 + x2 print(reduce(fn,[1,2,3,4])) # 1234 def char2num(s): dig = {'0':0,'1':1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} return dig[s] print(reduce(fn,map(char2num,'520'))) # map object 可以作为reduce的第二个参数 def str2int(s): #整理为一个str2int函数 def fn(x1,x2): return x1*10 + x2 def char2num(s): #这里的s居然不影响上面的s。 dig = {'0':0,'1':1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} return dig[s] return reduce(fn,map(char2num,s)) print(str2int('145')) ###practice def normalize(name): if not len(name): return if isinstance(name,str): return name[0].upper() + name[1:].lower() else: return print((normalize('aNL'))) def prod(l): if not isinstance(l,(list,tuple)): return def x(n1,n2): return n1*n2 return reduce(x,l) def prod1(l): if not isinstance(l,(list,tuple)): return return reduce(lambda x,y:x*y,l) print(prod1((1,23,3))) def str2float(s): if not isinstance(s,str): return x = s.split('.') return reduce(lambda m,y:m+y*(10**-len(x[1])),map(int,x)) print(str2float('12.45')) # print(len('123.45'.split('.')[0]))
Sign in to make a reply
Promethues