python基础学习——函数(二):map educefilter函数

一、编程式方法论:面向对象、函数式和面向过程

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代表指定初始值
原文地址:https://www.cnblogs.com/xucuiqing/p/11638273.html