函数式编程

函数式 = 编程语言定义的函数 + 数学意义的函数

1.不可变:不用变量保存状态,不修改变量

eg

def test():
    return n+1

2.第一类对象:函数即“变量”

eg:

def text(n) :
    print(n)
def test(name)
    print(name)

text(test(sumcet))

  第一步执行test(smcet),调用test函数,打印sumcet,由于test函数没有返回值,所以返回值为None,最后将得到的结果传给text函数

相当于将test()当作变量一样在处理最后打印结果为

sumcet
None

高阶函数

  a.把函数当作参数传给另一个函数

  b.返回值中包含参数

上面的text函数就是高阶函数

3.尾调用

在函数的最后一步调用另一个函数,最后一行不一定是函数的最后一步,

例如带有判断语句的函数

4.map函数

  map()是python内置的高阶函数,他接收一个函数和一个列表,并通过这个函数依次作用在列表的每个元素上,在python2中他将返回一个新列表,python3中得到的是迭代器。

eg:

s = [1, 2, 3, 4, 5]


def reduce(li1):
    return li1 - 1#减操作


def add(li2):
    return li2 + 1#加操作


def invo(li3):
    return li3 * li3#幂运算

#map函数的内部实现
def map_ex(func, li):
    b = []
    for a in s:
        b.append(func(a))
    return b


print(map_ex(add, s))#map_ex(add,s)将获取add函数的地址
print(map_ex(reduce, s))
print(map_ex(invo, s))
print('********************')
#利用map函数实现同样功能。
print(list(map(lambda x: x + 1, s)))#lambda匿名函数,s必须是可迭代对象,与上面结果进行对比
print(list(map(lambda x: x - 1, s)))
print(list(map(lambda x: x * x, s)))

输出

[2, 3, 4, 5, 6]
[0, 1, 2, 3, 4]
[1, 4, 9, 16, 25]
********************
[2, 3, 4, 5, 6]
[0, 1, 2, 3, 4]
[1, 4, 9, 16, 25]

map()函数可以做很多

eg 调用有名函数

name = ['bbu', 'sumcet', 'loVe']


def eng(s):
    s1 = s[0:1].upper() + s[1:].lower()
    return s1


print(list(map(eng, name)))

  输出

['Bbu', 'Sumcet', 'Love']

  

5.filter函数

filter(函数名,序列类型)

遍历序列中的每个元素,判断得到的布尔值,如果是True则保留

eg:

s = ['a_bbu', 'b_bbu', 'c_bbu']
a = filter(lambda x: x.startswith('b'), s)
print(list(a))

输出

['b_bbu']

6.reduce函数

reduce(函数名,序列类型,初始值)初始值默认为None

在python3中使用reduce函数要导入functools库,python2不需要

处理一个序列类型,然后把序列进行合并操作

eg:

from functools import reduce

s = [1, 2, 3, 4, 5, 6]
a = reduce(lambda x, y: x * y, s, 1)
print(a) 

 输出

720

  

 

 

 

 

 

  

posted @ 2018-03-27 17:47  sumcet  阅读(209)  评论(0编辑  收藏  举报