函数一些类型

函数(2.0)

递归函数

递归虽然写法简单,但是运算速度较慢,有最大递归限制(1000次)

斐波那契数列

def fib(x):
    if x ==1:
        return 1
    elif x==2:
        return 1
    else:
        return fib(x-1)+fib(x-2)
print(fib(5),fib(9))
5 34

匿名函数

格式

lambda para1,para2,...,paran:expression using paras
###关键字'lambda' + 若干参数 + : +函数表达式(参数的相关运算操作)
f=lambda  a,b='b',c='c': a+b+c ##参数定义与普通函数相同
print(f('1','2','3'))
print(f('a'))
123
abc

高阶函数

定义:

把一个函数名,以实参的形式,传递给这个函数的形参。

def add(a,b,func):
    return func(a)+func(b)
print(add('2','5',int))   ##传入2个字符串,以及一个强制类型转换的函数(int)
7

filter函数

filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)。filter(function or None, sequence) -> list, tuple, or string:入参为函数和列表/元组/字符串,返回值为item列表/元组/字符串。 筛选

print (list(filter(lambda x:x%2,range(10)))) 
[1, 3, 5, 7, 9]  ##匿名函数返回2的余数,偶数为False(余数为0) 故返回0-9的奇数
li1=[1,2,3,4,5,6,7,8,9]
li2=[1,3,6,8]
print(list(filter(lambda x:x not in li2,li1)))
[2, 4, 5, 7, 9]    ##得到2个列表非重复的部分(类型li1-li2)

map函数

map(function, sequence) :对sequence中的item依次执行function(item),将执行结果function(item)组成一个List返回。 map(function, sequence[, sequence, …]) -> list:入参是为函数和列表/元组/字符串,返回值为function(item)列表。 映射

print(list(map(lambda x:x%2,range(10))))
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] ##将列表的所有元素做lambda操作
print(list(map(lambda x,y:x+y,range(1,5),range(100,104))))
[101, 103, 105, 107]
############高阶函数实现map####################
def f(f2,li):
    rst=[]
    for i in li:
        rst.append(f2(i))
    return rst
def f2(x):
    return x*x-1
print(f(f2,[1,2,3,4,5,6,7,8]))
[0, 3, 8, 15, 24, 35, 48, 63]

注:map与filter都是先传入一个function(函数),再传入一个sequence(列表/元组/字符串),但是filter是返回sequence中满足function的元素(运算返回True),map是返回sequence各个元素经过function后的返回值

reduce函数

reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用。function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。reduce(function, sequence[, initial]) -> value:入参是为函数和列表/元组/字符串和初始值,返回值为数值。

reduce用法:先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给fuction,最终返回一个结果值
print reduce(lambda x,y:x*y-4,range(4))
-40
#计算0到100的和(初始值0)
print reduce(lambda x,y:x+y, range(101))
5050
#计算0到100的和(初始值100)
print reduce(lambda x,y:x+y, range(101),100) 初始值为100
5150
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章