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

来源:互联网 发布:java如何处理高并发 编辑:程序博客网 时间:2024/04/30 02:20

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



阅读全文
1 0
原创粉丝点击