1、变量可以指向一个函数
2、函数名可以看做一个变量名
3、高阶函数——可以接受函数作为参数的函数
Python内置高阶函数
1)map():
接受一个函数 f,并接受一个list,将list的每一个元素作用于 f 。返回一个新的list(Python2.x)
注意:map()不改变原有的list,而是返回一个新的list
eg:规范化命名nameLst= ['AShin', 'MONSTer', 'MASA', 'STOnE', 'MiNg', 'JoEy']
def format_str(s):
return s[0].upper()+s[1:].lower()
list(map(format_str, nameLst))
------------------------------------------------------------------------------------------------
在python3里面,map()、filter()的返回值已经不再是list,而是iterators, 所以想要使用,只用将iterator 转换成list 即可, 比如 list(map())
2)reduce():
接受一个函数f,并接受一个list,(可选参数,作为计算的初始值);将list中每个元素两两反复调用函数f,如果有初始值参数,则第一次将初始值与list中的第一个元素进行调用。返回最终结果值
eg:求乘积
from functools import reduce
def prod(x, y):
return x * y
mul_lst=[1,2,3,4,5]
reduce(prod, mul_lst)
3)filter():
接受一个函数f,并接受一个list,根据函数f对list中每个元素进行判断,返回结果为True的元素,并组成一个新的list(Python2.x)。
注意:函数f,是一个判断函数,返回True 或者 False
eg1: 删除字符串列表中的空白字符,以及字符串中的空格
def delete_blank(s1):
return s1.strip()
s = ['ABC', ' ', '123', ' Gdf ', ' QW ']
list(filter(delete_blank, map(delete_blank, s)))
eg2: 1-100中,这100个整数中平方根为整数的数
import math
def sqrt_int(num):
return math.sqrt(num) == (int)(math.sqrt(num))
list(filter(sqrt_int, range(1, 101)))
--------------------------------------------------------------------------------------------------------
此处,粘贴一个内置函数的用法。
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:
a = ' 123' a.strip()
结果: '123'
a='\t\t123\r\n'
a.strip()
结果:'123'
4)自定义排序函数 sort()
sorted()实现的是从小到大的排序,而可以给它加一个比较函数调用实现从大到小的排序。
def cmp_reverse(x, y):
if (x > y):
return -1
elif(x < y):
return 1
return 0
lst=[4, 5, 0, 1, 3, 2]
sorted(lst, cmp_reverse) ##python 2.x
sorted(lst, reverse=False) ##python 3.x
注意:
sorted
(iterable,
cmp
=
None
, key
=
None
, reverse
=
False
)
## Python 2.x
sorted
(iterable, key
=
None
, reverse
=
False
)
## Python 3.x