一、编程式方法论:面向对象、函数式和面向过程
1 面向过程:返回值函数,基本单位是函数。
找到解决问题的入口,按照固定的流程去模拟解决问题的流程,对过程细分,每次都从头运行,比函数式易读
2 函数式:编程式定义的函数+数学意义的函数
特性:不可变,不用变量保存状态,变量不可修改,没有赋值的操作
第一类对象,函数即“变量”
3、高阶函数:满足如下条件之一:
1)函数接受的参数是另外一个函数
#把函数当作参数传给另外一个函数 def foo(n):#n=bar print(n) def bar(name): print("my name is %s" %name) foo(bar)#n=bar 方式二: def foo(n):#n=bar print(n) def bar(name): print("my name is %s" %name) foo(bar("abc") ) 结果: my name is abc None # bar没有返回值,故传none给foo
2)返回值中包含函数
#返回值中包含函数 def bar(): print("from bar") def foo(): print("from foo") return bar n=foo() n() 结果: from foo from bar
二、map函数
1、特征:处理序列中的每个元素,得到的结果是一个“列表”,该“列表“元素个数及位置与原来一样
逻辑简单用lambda,逻辑复杂使用自定义函数
待处理的数据类型是可迭代对象即可,与for循环一起配合实现
2、样例
eg1
map_test(数据处理的方法和逻辑,待处理的可迭代的数据类型的数据)
num=[3,4,2,94,5,9,23] def add_one(x): return x+1 def reduce_one(x): return x-2 def map_test(func,array): ret=[] for i in array: res=func(i)#add_one(i) ret.append(res) return ret print(map_test(add_one,num)) print(map_test(lambda x:x-1,num)) print(list(map(lambda x:x**2,num))) print(list(map(reduce_one,num)))
eg2
mag="linhang" print(list(map(lambda x:x.upper(),mag)))
三、filter函数
1、函数特征:遍历序列中的每个元素,判断每个元素后得到布尔值,如果是真,则保留下来,最后得出一个新的列表组合
filter(数据处理的方法逻辑返回值是布尔值,待处理的可循环的数据)
样例
movie_people=["nana-x","nana1-x","xiaoxiao","KK","nana"] def x_show(n): return n.endswith("x") def filter_test(func,array): ret=[] for i in array: if not func(i): ret.append(i) return ret print(list(filter(x_show,movie_people))) print(list(filter(lambda x:x.endswith("x"),movie_people))) print(list(filter(lambda y:not y.startswith("nana"),movie_people)))
四、reduce函数
1、函数特征:处理一个序列,然后把序列进行合并操作,合并压缩得出一个最终的值
2、从functools模块中导入reduce模块
3、eg
方式一: num=[9,2,3,45,100] def reduce_test(func,array): res=array.pop(0) for i in array: res=func(res,i) return res print(reduce_test(lambda x,y:x*y,num)) 方式二: from functools import reduce num=[9,2,3,45,100] print(reduce(lambda x,y:x*y,num)) print(reduce(lambda x,y:x*y,num),2) #1代表指定初始值
python基础学习——函数(二):map\reduce\filter函数
原文:https://www.cnblogs.com/xucuiqing/p/11638273.html