廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

高阶函数

将函数作为参数传入,这样的函数称为高阶函数。函数式编程就是指这种高度抽象的编程范式。

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。如下所示:

1 deffun0(x,y,fun):2 return fun(x)*fun(y)3 print(fun0(-9,-10,abs))

1. 高阶函数之map

map(fun, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回。

1 list1=[0,1,2,3,4,5,6,7,8,9]2

3 list_result=[]4 for i inlist1:5 list_result.append(i*i*i)6 print(list_result)7

8 def cube(x):#求立方

9 return x*x*x10 print(list(map(cube,list1)))11

12

13 list2=[10,11,12,13,14,15,16,17,18,19]14 defmulti(x,y):15 return x*y16

17 #map接收两个list,可用于两个列表的对应索引数据进行操作

18 print(list(map(multi,list1,list2)))

2. 高阶函数之匿名函数

定义一个匿名函数并调用,定义格式如-->lambda arg1,arg2…:表达式

1 f=lambda x,y:x+y2 print(f(10,20))3

4 #不需要显式地定义函数,直接传入匿名函数更方便

5 print(list(map(lambda x:x*x*x,list1)))

3. 高阶函数之reduce

reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

1 from functools importreduce2 list1=[1,3,5,7,9] #如何让列表里面的值变成一个数字13579输出

3 deffun(x,y):4 return x*10+y5 print(reduce(fun,list1))6 print(reduce(lambda x,y:x*10+y,list1))#利用lambda来实现

7

8 print(reduce(lambda x,y:x+y,range(1,101)))#从1+2+...+99+100的总和

4. 高阶函数之filter

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

1 deffun2(x):2 return x%2==03 list2=[1,2,3,4,5,6,7,8,9]4 print(list(filter(fun2,list2)))5

6 print(list(filter(fun2, range(1, 101))))#输出1到100的偶数

7 print(list(filter(lambda x:x%2==0,list2)))#利用lambda来实现

8

9 #获取非空字符串函数

10 deffun3():11 list1 = ["tony", "is", "good", "man", " ", "hello", " "]12 for el inlist1:13 if(el andel.strip()):14 print(el)15fun3()16

17 #使用filter实现fun3的功能

18 defis_not_null(str1):19 return str1 andstr1.strip()20 list3=["tony","is","good","man"," ","hello"," "]21 print(list(filter(is_not_null,list3)))

5. 高阶函数之装饰器

1 importtime2 def waste_time(func): #用于计算函数执行的耗时

3 def function(*args,**kwargs):4 start_time=time.time()5 result=func(*args,**kwargs)6 end_time=time.time()7 spend=end_time-start_time8 print("函数%s 总共耗时%.3f秒:"%(func.__name__,spend))9 returnresult10 returnfunction11

12@waste_time13 defabc():14 print("aaa")15abc()16

17 def get_log(func): #能装饰的方法添加日志输出

18 importtime19 def wrapper(*args, **kw):20 print(str(time.asctime())+'call %s():' % func.__name__)21 return func(*args, **kw)22 returnwrapper23

24@get_log25 defabd():26 print("bbb")27 abd()

6. 高阶函数之 retrun function(返回函数)

1@waste_time2 def get_dict(**kwargs):3 defgetjson():4 jsons=""

5 for key,value inkwargs.items():6 jsons+=key+"="+str(value)+"&"

7 returnjsons8 returngetjson9

10

11 print(get_dict(name='tony',age=33))12 f=get_dict(name='tony',age=33)13 print(f())14 print(get_dict(name='tony',age=33)())

7. 高阶函数之sorted排序函数

1 num_list=[34,55,2,3,444,500]2 print(sorted(num_list)) #默认升序

3 print(sorted(num_list,reverse=True)) #reverse=True表示降序

4

5 #对字符串ASCII A=65 a=97进行排序

6 str_list=['ac','aa','AB','d','c']7 print(sorted(str_list))8 print(sorted(str_list,reverse=True))9

10 #用key来接收指定函数来进行自定义排序

11 str_list=['ac','aa','AB','d','c']12 print(sorted(str_list,key=str.lower)) #不考虑大小写

13

14 num_list=[34,55,2,3,444,500,-599,-222]15 print(sorted(num_list,key=abs)) #用绝对值进行排序

16

17 classTester:18 def __init__(self,age,name):19 self.age=age20 self.name=name21

22 t1=Tester(10,'tony')23 t2=Tester(20,'jack')24 t3=Tester(30,'tom')25

26 result=list(sorted([t1,t2,t3],key=lambda x:x.age)) #针对对象实例进行排序,指定了年龄

27 for test inresult:28 print(test.name,test.age)

8. 高阶函数之闭包

闭包的定义?闭包本质上就是一个函数

如何创建闭包?

函数要嵌套(有内外部函数)

内部函数使用外部函数的变量

外部函数返回内部函数的名称

如何使用闭包?典型的使用场景是装饰器的使用。

global与nonlocal的区别:

global可以改变全局变量,同时可以定义新的全局变量;

nonlocal只能改变外层函数变量,不能定义新的外层函数变量,并且nonlocal也不能改变全局变量。

global关键字可以用在任何地方,包括最上层函数中和嵌套函数中;

nonlocal关键字只能用于嵌套函数中,并且外层函数中必须定义了相应的局部变量,否则会发生错误。

简单的使用如下:

1 defoutFun(arg1):2 definFun(arg2):3 nonlocal arg1#nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。

4 arg1+=200

5 return arg1*arg26 returninFun7 infun=outFun(100)#调用外部函数,传入参数,返回是内部函数

8 result=infun(300)#调用内部函数,传入参数

9 print("the result is:",result)10

11 #使用闭包求给function计算耗时(上面的内容已经提到)代码如下:

12 importtime13 def waste_time(func): #用于计算函数执行的耗时

14 def function(*args,**kwargs):15 start_time=time.time()16 result=func(*args,**kwargs)17 end_time=time.time()18 spend=end_time-start_time19 print("函数%s 总共耗时%.3f秒:"%(func.__name__,spend))20 returnresult21 return function

9. 高阶函数之偏函数

偏函数主要辅助原函数,作用其实和原函数差不多,不同的是,我们要多次调用原函数的时候,有些参数,我们需要多次手动的去提供值。

而偏函数便可简化这些操作,减少函数调用,主要是将一个或多个参数预先赋值,以便函数能用更少的参数进行调用。

我们再来看一下偏函数的定义:

类func = functools.partial(func, *args, **keywords)

我们可以看到,partial 一定接受三个参数,从之前的例子,我们也能大概知道这三个参数的作用。简单介绍下:

func: 需要被扩展的函数,返回的函数其实是一个类 func 的函数

*args: 需要被固定的位置参数

**kwargs: 需要被固定的关键字参数

1 def add(*args, **kwargs):2 for n in args:#打印位置参数

3 print(n)4 print("-"*20)5 for k, v in kwargs.items():#打印关键字参数

6 print('%s:%s' %(k, v))7

8 #普通调用

9 add(1, 2, 3, v1=10, v2=20)10

11 #偏函数调用

12 from functools importpartial13 add_fun=partial(add,100,k1=200,k2=300)14 add_fun(1, 2, 3, v1=10, v2=20)

总结

本文是对Python 高阶函数相关知识的分享,主题内容总结如下:

初识高阶函数

高阶函数之map

高阶函数之匿名函数

高阶函数之reduce

高阶函数之filter

高阶函数之装饰器

高阶函数之 retrun function(返回函数)

高阶函数之sorted排序函数

高阶函数之闭包

高阶函数之偏函数

欢迎关注【无量测试之道】公众号,回复【领取资源】,

Python编程学习资源干货、

Python+Appium框架APP的UI自动化、

Python+Selenium框架Web的UI自动化、

Python+Unittest框架API自动化、

资源和代码 免费送啦~

文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

添加关注,让我们一起共同成长!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache camel_Apache Camel –从头开始开发应用程序(第2部分/第2部分)

apache camel这是本教程的第二部分,我们将使用Apache Camel创建发票处理应用程序。 如果您错过了它,一定要看一下第一部分 。 以前,我们已经定义了系统的功能要求,创建了网关,分离器,过滤器和基于内容的路由…

python 网格线_Python版简单网格策略(教学)

Python版简单网格策略(教学)Python版简单网格策略(教学)Author: 小小梦, Date: 2020-01-04 11:12:15Tags:backteststart: 2019-07-01 00:00:00end: 2020-01-03 00:00:00period: 1mexchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]i…

python土味情话_土味情话表情包下载

喵星人土味情话表情包是一款很甜的表情图片,现在的聊天模式三句话离不开表情包,而且小编带来的这款表情包非常的适合情侣日常撩,最新的土味情话,需要的朋友可以前来本站下载。土味情话大全一、“对不起。”“你永远都不要和我说对…

多云互操作性!=云服务聚合

多云定义为一种方法,它将来自多个云供应商的多个云(公共云或私有云)组合在一起。 但是,这不是来自不同供应商的各种服务的集合,它需要一种强制性的胶合剂–云不可知的方法,并在所有提供商之间实现互操作性。…

python股票预测代码_python用线性回归预测股票价格的实现代码

线性回归在整个财务中广泛应用于众多应用程序中。在之前的教程中,我们使用普通最小二乘法(OLS)计算了公司的beta与相对索引的比较。现在,我们将使用线性回归来估计股票价格。线性回归是一种用于模拟因变量(y)和自变量(x)之间关系的方法。通过简单的线性回…

如何在Spring中将@RequestParam绑定到对象

您是否在请求映射方法中用RequestParam注释了多个参数,并认为它不可读? 当请求中需要一个或两个输入参数时,注释看起来非常简单,但是当列表变长时,您可能会感到不知所措。 您不能在对象内部使用RequestParam批注&…

java替换指定位置字符_JS中的替换,以及替换指定位置的字符串

批量修改name属性中的值// 渲染完成,开始修改ansewer的name属性$(‘.sub_timu_zong_tihao‘).each(function(i){$(this).find(‘input[name*bianhao]‘).each(function(){// 首先获取name的值,对console.log(‘正在修改bianhao‘)var old$(this).attr(‘…

webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...

大家好,在软件测试面试过程中,经常有面试官问到这个问题,那我们应该如何回答才好呢?少废话,直接看答案:答案:在页面上发现bug之后,要想判断这个问题属于后端还是前端,我就…

spring基于注释的配置_基于注释的Spring MVC Web应用程序入门

spring基于注释的配置这是使Maven启动Spring 3 MVC项目的最小方法。 首先创建spring-web-annotation/pom.xml文件&#xff0c;并包含Spring依赖项&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apach…

ad09只在一定范围内查找相似对象_dxp查找相似对象

(Edit→Find Similar Objects)ShifF 查找 相似对象 EOS(Edit→Origin→Set)设置坐标原点 ESN((Edit → Select → Net) 选中显示某个网 络 FA(......“ctrlA”全选,选择需要修改的器 件,点鼠标右键弹出如下图的菜单: 选择 “查找相似对象” 移动鼠标到需要修改的属性上,点“ok”…

首次适应算法_CVPR 2020丨?商汤TSD目标检测算法获得Open Images冠军

编者按&#xff1a;此前&#xff0c;在文章《商汤科技57篇论文入选ICCV 2019&#xff0c;13项竞赛夺冠》里&#xff0c;商汤君报道了商汤科技荣获Open Images Object Detection Challenge 2019 冠军。由Google AI主办的Open Images大赛是目前通用物体检测和实例分割两个领域中数…

玩JDK 12的Switch表达式

在博客文章“操作中的JDK语言功能预览&#xff1a;切换表达式 ”中&#xff0c;我讨论了JEP 325 [“切换表达式&#xff08; 预览 &#xff09;”&#xff09;如何作为指定的“ 预览语言功能 ”的早期应用&#xff0c;如JEP 12所述。预览语言和VM功能”]。 JEP 325 适用于JDK 1…

java 三元 代替 if_Java 中三元和 if else 哪个的效率比较高,有底层解释吗,谢谢了!...

Genokiller2018-12-28 18:16:11 08:00是否还有其他影响效率的地方两段简短的测试代码&#xff1a;Test2.java (三元运算符)public class Test2{public static void main(String args[]){int m 1, n2;String s m > n ? "a" : "b";}}Test3.java ( if...…

python 验证码_4行Python代码生成图像验证码

点击上方蓝色字体&#xff0c;关注我们最近无意看到网上有人使用Python编写几十行代码生成图像验证码&#xff0c;感觉很是繁琐&#xff0c;这里为各位朋友推荐两种方法&#xff0c;使用4行Python代码即可生成验证码。1captcha库第1步&#xff1a;安装captcha库pip install cap…

python3 多线程_Python3多线程爬虫实例讲解

多线程概述多线程使得程序内部可以分出多个线程来做多件事情&#xff0c;充分利用CPU空闲时间&#xff0c;提升处理效率。python提供了两个模块来实现多线程thread 和threading &#xff0c;thread 有一些缺点&#xff0c;在threading 得到了弥补。并且在Python3中废弃了thread…

java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

elasticsearch组合多条件查询实现restful api以及java代码实现实际开发中&#xff0c;基本都是组合多条件查询。elasticsearch提供bool来实现这种需求&#xff1b;主要参数&#xff1a;must文档 必须 匹配这些条件才能被包含进来。must_not文档 必须不 匹配这些条件才能被包含进…

instanceof运算符_Java 8中的instanceof运算符和访客模式替换

instanceof运算符我有一个梦想&#xff0c;不再需要操作员和垂头丧气的instanceof &#xff0c;却没有访客模式的笨拙和冗长。 所以我想出了以下DSL语法&#xff1a; Object msg //...whenTypeOf(msg).is(Date.class). then(date -> println(date.getTime())).is(Strin…

python垃圾处理_利用python程序帮大家清理windows垃圾

前言大家应该都有所体会&#xff0c;在windows系统使用久了就会产生一些“垃圾”文件。这些文件有的是程序的临时文件&#xff0c;有的是操作记录或日志等。垃圾随着时间越积越多&#xff0c;导致可用空间减少&#xff0c;文件碎片过多&#xff0c;使得系统的运行速度受到一定影…

基于java家教管理系统_基于jsp的家教信息管理-JavaEE实现家教信息管理 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的家教信息管理, 该项目可用各类java课程设计大作业中, 家教信息管理的系统架构分为前后台两部分, 最终实现在线上进行家教信息管理各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家教信息管理相关的实体…

如何从云功能调用外部REST API

在之前的博客文章中&#xff0c;我展示了如何创建您的第一个云功能 &#xff08;以及一个视频 &#xff09;。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能&#xff08;非常简单&#xff09;。 登录到IBM Cloud帐户 点击目录 删除标签&…