函数式编程

1 高阶函数

函数名也是变量,可以指向其他变量(变量可以指向函数)

f = abs

abs() = = f()

高阶函数:函数的参数可以是函数(函数可以接收另一个函数)

函数式编程就是指这种高度抽象的编程范式

2 map()

map传入两个参数,一个函数(只能接收一个参数?),一个Iterable,生成Iterator(Iterator是惰性序列,需用list将其计算出来)

def f(x):
    return x*x
list(map(f,[1,2,3]))

3 reduce()

接收一个函数和一个序列,函数必须接收两个参数,

reduce(f,[x1,x2,x3]) = f(f(x1,x2),x3) 

1 from functools import reduce
2 digits = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
3 def char2num(s):
4     return digits[s]
5 #map(char2num,"123456")
6 def fn(x,y):
7     return x*10+y
8 print(reduce(fn,map(char2num,"12345678"))+1)

name.title()首字母大写

 

4 filter

接收一个函数和一个序列,将传入的函数依次作用于元素,根据返回值是True还是False判断是否保留该元素

filter返回的是一个Iterator 惰性序列,需要用list()将其计算出来

def is_palindrome(x):
    return str(x) == str(x)[::-1]
list(filter(is_palindrome,list(range(0,100))))

函数中只有一个参数,需要代入列表的元素,则传入函数名即可

只要返回的值是true则保留该值

5 sorted

将列表元素进行排序

sorted([1,2,3,4,1,1,4,14],key = abs)

key提供一个函数接入来自定义排序规则,先在函数中计算,将返回值排序,并对应至原列表

sorted对字符串排序默认按照ASCII码大小进行排序

str.lower将字符串变成小写,再加以排序

反向排序则传入第三个参数 reverse=True

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
    return t[0].lower()
sorted(L,key = by_name)

 6 返回函数

内部函数计算,外部函数返回内部函数

7 匿名函数

lambda 参数 : 表达式

直接返回表达式计算的值

def build(x,y):
    return lambda : x*y
f = build(2,3)
f()

lambda 可以引用局部变量

 8 装饰器

9 偏函数

把函数的某些参数固定住

import functools
in2 = functools.partial(int,base = 2)

 

posted on 2018-03-30 22:50  lvgb  阅读(120)  评论(0编辑  收藏  举报

导航