高阶函数

First Class Object

  • 函数在python中是一等公民
  • 函数也是对象,可调用的对象
  • 函数可作为普通变量、参数、返回值等等

高阶函数

  • 数学概念 y=g(f(x))
  • 在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数
    • 接受一个或多个函数作为参数
    • 输出一个函数

自定义sort函数

  • 排序问题

    • 仿照内建函数sorted,请自行实现一个sort函数。能够为序列元素排序
  • 思路
    • 内建函数sorted函数返回一个新的列表,可以设置升序或降序,可以设置一个排序的函数。自定义函数也需要实现这些功能
    • 新建一个列表,遍历原列表,和新列表的值依次比较决定如何插入到新列表中

sort函数实现。

基本思路的实现

#自定义排序函数:
def sort(iterate):
netlist = []
for x in iterate:
for i,y in enumerate(netlist):
if x > y: #找到大的就插入,如果换成x < y 是同样的
netlist.insert(i,x) #降序
break #这个braek 是必须加的,当if条件成立就变成死循环了
else: #不大于,说明就是最小的,尾部追加
netlist.append(x)
return netlist
print(sort([1,2,3,45,5,6,8,123]))

用参数控制升序还是降序

#自定义排序函数:
def sort(iterate,reverse=False):
netlist = []
for x in iterate:
for i,y in enumerate(netlist):
flag = x > y if reverse else x < y #默认是升序,如果reverse = True 为降序
if flag:
netlist.insert(i,x)
break
else:
netlist.append(x)
return netlist
print(sort([1,2,3,45,5,6,8,123]))

用lambda函数实现,反转功能

#自定义排序函数:
def sort(iterate,reverse=False,key=lambda x,y : x<y):
netlist = []
for x in iterate:
for i,y in enumerate(netlist):
#flag = x > y if reverse else x < y #默认是升序,如果reverse = True 为降序
flag = key(x,y) if not reverse else not key(x,y)
if flag:
netlist.insert(i,x)
break
else:
netlist.append(x)
return netlist
print(sort([1,2,3,45,5,6,8,123],reverse=True))

内建高阶函数

sorted(iterable[,key][,reverse])  排序

  • 返回一个新的列表,对一个可迭代对象的所有元素排序,排序规则为key定义的函数,reverse表示是否反转
  • 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,9,4,55,150,-3,78,28,123]))

map(function,*iterables) --> map object

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

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

函数柯里化

柯里化

  • 指的是将原原来接受两个参数的函数变成接受一个参数的函数过程,新的函数参数返回一个以原有第二个参数为参数的函数
  • z = f(x,y) 转化为 z = f(x)(y)的形式

将加法函数柯里化

#将加法函数柯里化
#原函数
#def add1(x,y):
# return x+y
#柯里化函数
def add(x):
def _add(y):
return x+y
return _add
print(add(4)(5))

通过嵌套函数将函数柯里化

python 高阶函数、柯里化的更多相关文章

  1. 高阶函数,柯里化,sort排序

    高阶函数概念 first class object:     函数在python中时一等公民.     函数也是对象,可调用的对象.     函数可以作为普通变量,参数,返回值等等. 高阶函数:    ...

  2. scala面向对象.高阶函数,柯里化,Actor编程简介

    1.定义一个类 class Person{ //用val修饰的变量是只读属性,有getter但是没有setter val id ="111" //用var修饰的变量既有getter ...

  3. 从0开始的Python学习007函数&函数柯里化

    简介 函数是可以重用的程序段.首先这段代码有一个名字,然后你可以在你的程序的任何地方使用这个名称来调用这个程序段.这个就是函数调用,在之前的学习中我们已经使用了很多的内置函数像type().range ...

  4. Python高阶函数及函数柯里化

    1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...

  5. js高阶函数应用—函数柯里化和反柯里化

    在Lambda演算(一套数理逻辑的形式系统,具体我也没深入研究过)中有个小技巧:假如一个函数只能收一个参数,那么这个函数怎么实现加法呢,因为高阶函数是可以当参数传递和返回值的,所以问题就简化为:写一个 ...

  6. 从 ES6 高阶箭头函数理解函数柯里化

    前言:第一次看到多个连续箭头函数是在一个 react 项目中,然鹅确认了下眼神,并不是对的人,因为看得一脸懵逼.em......于是开始各种搜索,先是知道了多个连续箭头函数就是 es6 的多次柯里化的 ...

  7. js高阶函数应用—函数柯里化和反柯里化(二)

    第上一篇文章中我们介绍了函数柯里化,顺带提到了偏函数,接下来我们继续话题,进入今天的主题-函数的反柯里化. 在上一篇文章中柯里化函数你可能需要去敲许多代码,理解很多代码逻辑,不过这一节我们讨论的反科里 ...

  8. React-高阶函数_函数柯里化

    高阶函数_函数柯里化 高阶函数(定义) 如果一个函数符合下面两个规范,就是高阶函数: 如果A函数,接收的参数是一个函数,那么A就是一个高阶函数(比如数组方法arr.map()接收的就是一个处理item ...

  9. python笔记--3--函数、生成器、装饰器、函数嵌套定义、函数柯里化

    函数 函数定义语法: def 函数名([参数列表]): '''注释''' 函数体 函数形参不需要声明其类型,也不需要指定函数返回值类型 即使该函数不需要接收任何参数,也必须保留一对空的圆括号 括号后面 ...

随机推荐

  1. fsLayuiPlugin入门使用

    简介 源码下载后,不能直接打开,必须运行在容器下,例如:nginx.tomcat.jetty等容器. 源码中默认配置了nginx容器,可以直接启动nginx访问. 本文主要介绍下载源码后的使用,避免在 ...

  2. python - django (cookie)

    # """ Cookile: # 因为 HTTP 请求是没有状态的,每一次请求都是独立的 Cookile 的存储: # 保存在浏览器上的 键值对. # 服务器控制着响应, ...

  3. nginx动静分离配置

    动静分离: 所谓动静分离指的是当访问静态资源时,路由到一台静态资源服务器,当访问是非静态资源时,路由到另外一台服务器 静态资源配置: 如配置如下location 表示url为  /static/*.x ...

  4. 将 Django 应用程序部署到生产服务器

    原文出自: http://www.ibm.com/developerworks/cn/opensource/os-django/ 比较有启发性质的一篇文章,会避免很多弯路 Django 是一个基于 P ...

  5. 心跳(纯代码制作心形,animation动画)

    思路:利用两个长方形(比例是2:3 | 3:2)可以合成心形,然后利用动画,缩放大小实现心跳(纯代码),效果如下: <body> <div></div> </ ...

  6. 对深层嵌套对象进行取值&赋值

    需求如下: let obj = { foo: { bar: { name: 'biz' } } }; // 输出 'biz' this.getObj(obj, 'foo.bar.name'); obj ...

  7. faebdc的烦恼 莫队

    faebdc的烦恼 莫队 题面 思路 有点难想的莫队. 首先我们肯定要一个cnt[i]记录难度i出现的次数,但是我们发现每次删去一个难度后,如果那个难度的个数恰好是当前最多次数,我们就可能要更新一下答 ...

  8. 【概率论】5-3:超几何分布(The Hypergeomtric Distribution)

    title: [概率论]5-3:超几何分布(The Hypergeomtric Distribution) categories: - Mathematic - Probability keyword ...

  9. AWS API Gateway Swagger定义

    导出Swagger接口定义文件 在AWS API Gateway界面上,可以导出swagger接口定义文件. 而后利用Node js swagger-ui 依赖,生成swagger接口地址 Cloud ...

  10. 【模板】杜教筛(Sum)

    传送门 Description 给定一个正整数\(N(N\le2^{31}-1)\) 求 \[ans1=\sum_{i=1}^n \varphi(i)\] \[ans_2=\sum_{i=1}^n \ ...