lambda,map,reduce,filter

匿名函数:lambda

语法:lambda x:x**2      冒号前的x为函数中的形参,冒号后面的部分为返回值

def muil(x):
    return x**2        #这两个函数的功能是一样的。第一个是一般形式的函数,第二个是匿名函数(匿名函数需要用一个变量接受)
print(muil(2))
---》4

a =lambda x:x**2       #lambda x:x**2 就相当于 muil这个函数,只是没有名字,相对简洁。
print(a(2))
---》4

高阶函数:

map()  :

语法:map(func, *iterables)  传入2个参数,第一个是函数名,第二个是可迭代数据类型的参数

作用:对传入的可迭代的数据内的每一个元素进行 func 方法的运算,并返回一个处理完之后的可迭代数据

函数的演化:

#map()
a = [1,2,3,4,5]      第一步
def _cl(x):
    b = []
    for i in x:
        i = i**2
        b.append(i)
    return b
c= _cl(a)
print(c)
--》[1, 4, 9, 16, 25]

a = [1,2,3,4,5]      第二步
def muil(y):
    return y**3

def _cl(func,x):
    b = []
    for i in x:
        i = func(i)
        b.append(i)
    return b
c= _cl(muil,a)
print(c)
---》[1, 8, 27, 64, 125]

def _cl(func,x):           第三步
    b = []
    for i in x:
        i = func(i)
        b.append(i)
    return b
c= _cl(lambda x:x**2,a)
print(c)
---》[1, 4, 9, 16, 25]

a = [1,2,3,4,5]                   第四步
b = map(lambda x:x**3,a)
print(b)
print(list(b))
---》<map object at 0x029E6830>       #map函数返回的四一个可以迭代的map对象 ,可以通过list方法查看
[1, 8, 27, 64, 125]

filter():

语法:filter(func, *iterables)  传入2个参数,第一个是函数名,第二个是可迭代数据类型的参数

作用:filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来

filter演变:

a = [1,2,3,4,5,6,7,8]
def _filter(x):
    b = []
    for i in x:
        if i < 5:
            b.append(i)
    return b
c = _filter(a)
print(c)
---》[1, 2, 3, 4]

a = [1,2,3,4,5,6,7,8]
def _panduan(y):
    if y < 5:
        return True

def _filter(func,x):
    b = []
    for i in x:
        if func(i):
            b.append(i)
    return b
c = _filter(_panduan,a)
print(c)
---》[1, 2, 3, 4]

a = [1,2,3,4,5,6,7,8]
def _filter(func,x):
    b = []
    for i in x:
        if func(i):
            b.append(i)
    return b
c = _filter(lambda x:x<5,a)
print(c)
---》[1, 2, 3, 4]

a = [1,2,3,4,5,6,7,8]
b = filter(lambda x:x<5,a)          #filter返回的是filter类型的可迭代对象,可以通过list方法或是for循环遍历。
print(list(b))
---》[1, 2, 3, 4]

reduce():

语法:reduce(function, sequence, initial=None)  function传入函数,sequence传入序列,initial初始参数

作用:将sequence中的所有元素进行function函数的运算,并返还一个值。(如将sequence中的缘由元素进行累乘)。注意的是,这里调用的function中的参数只有2个。

演变:

num1 = [1,2,3,4,5,6,7]
def muil(x,y):
    return x*y

def _muil(func,sequence,initial = None):
    if initial == None:
        res = sequence.pop(0)
    else:
        res = initial
    for i in sequence:
        res = func(res,i)
    return res
a =_muil(muil,num1,10)
print(a)
---》50400

num1 = [1,2,3,4,5,6,7]
def _muil(func,sequence,initial = None):
    if initial == None:
        res = sequence.pop(0)
    else:
        res = initial
    for i in sequence:
        res = func(res,i)
    return res
a =_muil(lambda x,y:x*y,num1,10)
print(a)
---》50400

from functools import reduce
num1 = [1,2,3,4,5,6,7]
a= reduce(lambda x,y:x*y,num1)
print(type(a),a)
---》<class 'int'> 5040

猜你喜欢

转载自www.cnblogs.com/jiangxiaolong-1996/p/9251137.html