高阶函数

高阶函数

Frist class object

函数在python中是一等公民

函数也是对象,可调用的对象

函数可以作为普通变量,参数,返回值等等

数学概念y=gfx))

在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数

接受一个或者多个函数作为参数

输出一个函数

计数器:

def counter(base):
def inc(step=1):
base += step
return base
return inc()

自定义sort函数

排序问题:仿照内建函数自行实现一个sort函数(不使用内键函数),能够为列表元素排序

思路:内建函数sorted函数是返回一个新的列表,可以设置成升序或者降序,可以设置一个排序的函数,自定义的sort函数也要实现这个功能

新建一个列表,遍历源列表,和新的列标配的值一次比较决定如何插入新列表中

def sorts(iterable):
ret = []
for x in iterable:
for i,y in enumerate(ret):
if x > y:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print((sorts([7,5,9,5,6,7,1,7])))

优化:

def sorts(iterable,reverse=False):
ret = []
for x in iterable:
for i,y in enumerate(ret):
flag = x>y if reverse else x<y
if flag:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sorts([7,89,8,56,7,13,7]))

3

def sort(iterable, key=lambda a,b : a>b):
ret = [ ]
for x in iterable:
for i, y in enumerate(ret):
if key(x, y): # 函数的返回值是bool
ret.insert(i,x)
break
else:
ret.append(x)
return ret

print(sort([1,2,5,4,2,3,5,6]))

4

def sort(iterable, reverse=False, key=lambda x,y:x<y):
ret = []
for x in iterable:
for i,y in enumerate(ret):
flag = key(x,y)if not reverse else not key(x,y)
if flag:
ret.insert(i, x)
break
else:
ret.append(x)
return ret
print(sort([1,2,5,4,2,3,5,6]))

 

内建函数高阶函数

sorted(iterable[,key][,resverse])

排序

filter(function,iterable)—-> filter object

过滤数据

mapfunc*iterable—->map object

映射

Sorted(lst.key = lambda x:6-x)#返回新的列表

List.sort(key=lambda x:6-x)#就地修改

filter(function,iterable)#过滤可迭代的对象的元素,返回一个迭代器

function一个具有一个参数的函数,返回bool

列如,过滤出数列中能被3整除的数字

List(filter(lambda x:x%3 == 0,[1,99,33,55,-3,78,28,123]))

Map(function,*iterables)—–> map object

对多个可迭代对象的元素按照指定的函数进行映射,返回一个迭代器

list(map(lambda x:2*x,range(5)))
dict(map(lambda x:(x%5,x),range(500)))

柯里化

指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程,新的函数返回一个以原有第二个参数的函数

Z= fxy)转换成z= fx)(y)的形式

举例

def add(x):
def _add(y):
return x+y
return _add
print(add(4)(5))

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96910

(0)
zhangmengzhangmeng
上一篇 2018-04-23 09:05
下一篇 2018-04-23 10:28

相关推荐

  • 封装与解构 集合

    封装和解构 封装:将多个值进行分割,结合在一起,本质上返回元组,只是省掉了小括号 ‘==‘意思为内容一致,‘=’意思为内存空间一致 解构:把线性结构的元素解开,并顺序的赋值给其他变量,左边接纳的变量数要和左边解开的元素数量一致 集合不是非线性 解构中使用*变量名接收,但不能单独使用,被*变量名收集后组成一个列表 第一个下划线为9,结果被第二个下划线重新赋值为…

    Python笔记 2018-04-01
  • Python第三周小结

    经过了三周的学习,我们已经基本完成了Python基础数据结构的学习,包括列表,字符串,元组,bytes, bytearray, set, 字典等。为了更好的理解和熟练使用这些基本的数据结构,我将它们各自的特点分别总结 并做成了表格,希望能够帮助我们更好的理解的同时,熟练掌握这些数据结构。    

    2018-04-10
  • Centtos7搭建ftp服务

    Centtos7搭建ftp服务 下载安装软件包 yum -y install vsftpd   开启启用ftp服务 systemctl start vsftpd    #设置立即启用该服务 systemctl status vsftpd   #查看该服务当前运行状态 systemctl enable vsftpd   #设置开机自动启用该服务 systemc…

    Python笔记 2018-07-07
  • Python内置数据结构——字符串

    知识结构图 学习笔记 字符串 字符组成的有序序列,字符的集合 使用单引号、双引号、三引号引起来的字符序列 不可变对象 Unicode类型 定义 单引号、双引号、三引号 r、R:引号内的字符原样输出 元素访问 索引访问 可迭代 join连接 “string“.join(iteratable) 使用string作为分隔符将可迭代对象连接起…

    2018-03-31
  • 正则表达式

    正则表达式 分类 BRE:基本正则表达式,grep,sed,vi等软件支持,vim有扩展 ERE:扩展正则表达式,egrep,grep -E ,sed  r等 PCRE:几乎所有的高级语言都是PCRE的方言或则变种, 基本语法 元字符metacharater .  匹配除换行符外任意一个字符 [abc]字符集合,只能表示一个字符的位置,匹配所包含的任意一个字…

    Python笔记 2018-05-07