chapter5.1高阶函数

高阶函数

  函数在Python中是一等公民

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

  函数可以做为普通变量、参数、返回值等

数学概念y = g(f(x))

在数学和计算机科学中,高阶函数要满足至少一个以下的条件

  接收一个或多个函数

  输出一个函数,最多一个,不能多

def counter(base):
    def inc(step = 1):
        nonlocal base
        base += step
        return base
    return inc
s1 = counter(5)
s2 = counter(5)

比较两个函数,比不了大小,就比地址,

== 判断内容是否相同,没有比地址,is判断地址是否相同

def sort(iterable,reverse=False):
    a = []
    for x in iterable:
        for i,y in enumerate(a):
            flag = x>y if reverse else x<y
            if flag:
                a.insert(i, x)
                break
        else:
            a.append(x)

    return a
sort([1,2])

插入实现用一个参数控制

def sort(iterable,reverse=False,key=lambda a,b: a>b):
    a = []
    for x in iterable:
        for i,y in enumerate(a):
            flag = key(x,y) if reverse else not key(x,y)
            if flag:
                a.insert(i, x)
                break
        else:
            a.append(x)

    return a
sort([1,2])

参数用函数,是高阶函数,忽略算法效率问题

enumerte

str.lower(‘A‘)  调用类方法,理解为函数,操作对象为’A‘

‘A‘.lower()  ’A‘对象对自己调用方法把自己转化   对象.操作

内建函数,高阶函数

sorted(iterable, /, *, key=None, reverse=False)

  sorted 中 key只是比较方式,不会影响原数据,reverse表示是否反转排序

sorted(range(5),key=lambda x: 6-x)
output : [4, 3, 2, 1, 0]

  立即返回新列表

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

function 一个一个的计算,操作具有一个参数的函数,返回bool,      返回True时的实参

list(filter(lambda x:x-1, range(5)))
output : [0, 2, 3, 4]

x-1,当x = 1 时,得0,等效False,过滤掉1

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

传入传出个数不变

list(map(lambda x:2*x+1 ,range(5)))output : [1, 3, 5, 7, 9]

map函数返回一个迭代器,要用容器接收

dict(map(lambda x:(x%5,x), range(400)))
output : {0: 395, 1: 396, 2: 397, 3: 398, 4: 399}

注意字典集合去重的问题

函数返回值一定为1个

构造对象,解析式 都可以封装或者创建容器

柯里化 currying

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

z = f(x, y) 转换为z = f(x)(y)

通过嵌套函数可以把函数转化成柯里化函数
函数块右移,参数下拉,新建函数,再调用原函数

def add(x,y):
    return x+y
add(4,5)
def add(x):
    def fn(y):
        return x+y
    return fn
add(4)(5)

原文地址:https://www.cnblogs.com/rprp789/p/9544843.html

时间: 2024-11-05 18:56:26

chapter5.1高阶函数的相关文章

js高阶函数

map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个

python 高阶函数

高阶函数也遵循函数即变量的形式 高阶函数的形式: 1.把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能) 如: def abc(): print('this is abc') def def(func): print(func) def(abc()) ====结果=======出来的是一个内存地址 <function agc at 0x00......> 高阶函数实例 import time def bar(): time.sleep(3) def test1

python 中的高阶函数

函数名其实就是指向函数的变量 >>> abs(-1) 1 >>> abs <built-in function abs> >>> a=abs >>> a(-1) 1 高阶函数:能接收函数做变量的函数 >>> def abc(x,y,f): ... return f(x)+f(y) ... >>> abc(-2,3,abs) 5 python中的内置高阶函数 map()函数和reduce(

Python高阶函数-闭包

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的. 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来. 但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心. 等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪

Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() 获取文件编码,f.encoding() 获取文件在内存中的编号,f.fileno() 获取文件终端类型(tty.打印机等),f.isatty() 获取文件名,f.name() 判断文件句柄是否可移动(tty等不可移动),f.seekable() 判断文件是否可读,f.readable() 判断文件是

python高阶函数

什么是高阶函数?根据例子一步步来 变量可以指向函数 以python内置的求绝对值的函数abs为例,我们可以有下面几种调用方法 >>> abs(-10) 10 但是如果只写abs呢? >>> abs <built-in function abs> abs(-10)是函数的调用,abs是函数本身 我们知道结果可以赋值给变量,函数是否可以呢? >>> x=abs(-10) >>> x 10 y=abs >>>

【函数】02、匿名函数、生成器、高阶函数

一.匿名函数 1.定义 语法格式: lambda args:expression args:以逗号分隔的参数列表 expression:用到args中各参数的表达式 lambda定义的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和非表达式,如for和while等 lambda的首要用途是指定短小的回调函数 lambda将返回一个函数而不是将函数赋值给某变量名 In [77]: lambda x: x+1 Out[77]: <function __main__.<lamb

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

JavaScript设计模式与开发实践-读书笔记(3)闭包和高阶函数

闭包(closure) 闭包的形成与变量的作用域以及变量的生存周期密切相关. 变量的作用域,就是指变量的有效范围. 全局变量和局部变量. 在JavaScript中,函数可以用来创造函数作用域. 变量的生存周期,全局变量的生命周期是永久的,除非我们主动销毁这个全局变量. 对于在函数体内用var关键字声明的局部变量来说,当退出函数时,这些局部变量即失去了它们的价值,它们都会随着函数调用的结束而被销毁. 利用闭包我们可以完成许多奇妙的工作. 闭包的作用: 1.封转变量 闭包可以帮助我们把一些不需要暴露