您的位置:首页 > 编程语言 > Python开发

Python进阶学习笔记——函数式编程之高阶函数

2017-09-03 16:19 666 查看
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

注意:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: