匿名函数: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