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)