一、编程式方法论:面向对象、函数式和面向过程
1 面向过程:返回值函数,基本单位是函数。
找到解决问题的入口,按照固定的流程去模拟解决问题的流程,对过程细分,每次都从头运行,比函数式易读
2 函数式:编程式定义的函数+数学意义的函数
特性:不可变,不用变量保存状态,变量不可修改,没有赋值的操作
第一类对象,函数即“变量”
3、高阶函数:满足如下条件之一:
1)函数接受的参数是另外一个函数
#
把函数当作参数传给另外一个函数
def foo(n):#n=barprint(n)
def bar(name):
print("my name is %s" %name)
foo(bar)#n=bar
方式二:
def foo(n):#n=barprint(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: ifnot 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代表指定初始值
原文:https://www.cnblogs.com/xucuiqing/p/11638273.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!