Discuss / Python / day10--2022/4/14

day10--2022/4/14

Topic source

Promethues

#1 Created at ... [Delete] [Delete and Lock User]
# -*- 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]))

  • 1

Reply