高阶函数(包含偏函数)简要介绍

python的变量类型还可以是函数,每一个函数名就代表了一种指向函数的变量,变量也可以是一个指向函数的变量

 可以调用另外一个函数的函数被称为高阶函数。就比如map() and reduce()等

map()&reduce()

map() 函数对一个list内的每个元素都进行相同的操作(同一个函数),然后把返回值按原来元素的顺序重新生成一个列表。

reduce()接受一个二元函数和一个列表,对列表里每一个元素和下一个元素进行累积运算,即f(f(f(a,b), c), d)这样的累加运算,有的时候很好用。

比如接受一个转换字符串中的小数到float类型的内置函数;(保证输入是一个小数)

 1 # -*- coding: utf-8 -*-
 2 from functools import reduce
 3 
 4 def str2float(s):
 5     mid = s.find('.')
 6     
 7     flolen = len(s) - mid - 1
 8     def toint(x, y):
 9         return x * 10 + y
10     def tonum(x):
11         d = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
12         return d[x]
13     s1 = map(tonum ,s[0:mid] + s[mid+1 : ])
14     out = reduce(toint, s1) 
15     out /= (10**flolen)
16     return out

 filter() 

filter()接受一个返回值为bool值的参数f, 通过该函数对一个list内部所有的元素进行判断是否符合条件,如果符合就返回True,否则False。

filter()返回的是一个Iterator,是一种惰性序列,如果我们需要一个完整的list,可以用类型转换函数list()

从整数序列中找到回文数:

 1 def is_palindrome(n):
 2     y = n
 3     s = 0
 4     while(y > 0):
 5         s = s*10 + y%10
 6         y//=10
 7     return s == n
8 output = filter(is_palindrome, range(1, 1000)) 9 print('1~1000:', list(output)) 10 if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]: 11 print('测试成功!') 12 else: 13 print('测试失败!')

 sorted()

sorted()接受一个list,同时按从小到大的顺序对其进行排序(当然也可以自己定义对应的判断函数)。

sorted()有命名关键字参数key, reverse,key接受一个函数名,代表着按key的返回值从小到大的顺序对list进行排序返回,reverse是一个bool值,如果为真就按照从大到小的顺序来排列,也就是按照key的返回值从大到小来排序。

高阶函数有很多命名关键字参数,便于我们自定义操作。

 偏函数:指可以对一个已知的函数固定一部分参数的函数,可以使用functools模块中的partial函数进行固定参数 another_func = functools.partial(func, a= 0)

原文地址:https://www.cnblogs.com/zy1120192493/p/12873460.html