博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
chapter5.1高阶函数
阅读量:6074 次
发布时间:2019-06-20

本文共 1811 字,大约阅读时间需要 6 分钟。

高阶函数

  函数在Python中是一等公民

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

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

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

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

  接收一个或多个函数

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

 

def counter(base):    def inc(step = 1):        nonlocal base        base += step        return base    return incs1 = 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

插入实现用一个参数控制

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 asort([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+yadd(4,5) def add(x):    def fn(y):        return x+y    return fnadd(4)(5)

 

转载于:https://www.cnblogs.com/rprp789/p/9544843.html

你可能感兴趣的文章
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Linux 安装oracle内核参数
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
android实用测试方法之Monkey与MonkeyRunner
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>
处理excel表的列
查看>>
枸杞子也能控制脂肪肝
查看>>
Excuse me?这个前端面试在搞事!
查看>>
C#数据采集类
查看>>
quicksort
查看>>
检验函数运行时间
查看>>
【BZOJ2019】nim
查看>>
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>