吴老的《selenium webdriver 实战宝典》出版了! 一.学习内容 * lambda函数 * map函数 二.lambda函数 1.函数说明lambda语句被用来创建新的函数对象,并且在运行时返回它们; Python使用lambda关键字来创建匿名函数。这种函数得名于省略了用def声明函数的标准步骤; lambda只是一个表达式,函数体比def简单很多; lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去; lambda函数拥有自己的名字空间,且不能访问自由参数列表之外全局名字空间里的参数; 虽然lambda函数看起来只能写一行,却不等同于C或C 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率; lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名); 像if或for或print等语句不能用于lambda中;
语法: lambda [arg1 [, agr2,.....argn]] :expression 2.练习一:lambda函数实现自增1计算data=lambda x:x 1 data(1) data(2) lambda作为一个表达式,定时了一个匿名函数,上例的代码x为入口参数,x 1为函数体,用函数来表示为: def g(x): return x 1 3.练习二:lambda函数实现x y的z次方a=lambda x,y,z:(x y)**z print a(1,2,3) x,y,z为传入的3个参数,(x y)**z为表达式,当a(1,2,3)则会将x赋值为1,y赋值为2,z赋值为3,然后带入到表达式(x y)**z中进行计算,最后将计算的结果return返回回来,这里的lambda x,y,z:(x y)**z也可以看到匿名函数如下写法: def g(x,y,z): return (x y)**z g(1,2,3) 4.练习三:lambda函数实现字符串指定次数打印、数字与指定数字相乘def make_repeater(n): return lambda s:s*n data=make_repeater(3) data('python') data(5) 首先定义了一个方法,make_repeater(),该方法可以传入参数并返回lambda函数,用来指定次数,当执行data=make_repeater(3),则data=lambda s:s*3,当调用data("python")时,则s为python,s*3为重复3次python,然后返回结果 当调用data(5)时,则s为5,s*3为5*3可以直接计算得到结果15,然后返回结果。 当然如果不想使用定义的make_repeater()函数,想只用lambda函数,我们也可以这样写: data=lambda s,n:s*n data ('python',3) data(5,3) 这样是不是方便很多呢,传入两个参数s和n,然后执行表达式s*n,并返回计算结果。 5.练习四:lambda表达式会返回一个函数对象,如果没有变量接受这个返回值,它很快就会被丢弃,也正是由于lambda只是一个表达式,所以它可以直接作为list、dict等成员lists=[lambda s:s**3,lambda a:a**3] data=lists[0] data(2) lambda函数如果学的好,一些简单的功能实现起来就会很简单,而且代码还简洁明了,之所以将这个函数的每个练习都仔仔细细的说了一遍原委,就是想更深的去掌握这个函数。 三.map函数 1.map函数说明将每个列表元素或字符串都执行某个函数map的函数操作方法:它将每个字符串或者列表元素,应用某个函数方法,结果返回列表。当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq map(int,'12345') map(str,(12,3,4)) map(str,[2,3,4]) ''.join(map(str,'12345')) 2.练习一:map函数实现求两数之和a=map(lambda x,y:x y,[1,2,3],[2,3,4]) 这里用了map和lambda两个函数,map(函数,序列),将序列中每一个元素都执行函数功能,即将[1,2,3]和[2,3,4]中对应项当成x,y参数分别传入,从而得到计算结果[3,5,7] 此方法中lambdax,y:x y可以看成如下自定义方法: def sum(a,b): return a b print map(sum,[1,3,4,5],[1,2,3,4]) 3.练习二:map函数求list中每个元素的长度lista=['a','abc','elephant'] a=map(lambdaa:len(a),lista) 法二: lista=['a','abc','elephant'] map(len,lista) 将lista中每一项都传给len()函数从而求得每项的长度。 4.map函数-两数求值问题注意a:map无法处理seq长度不一致;map(lambda x,y:(x**y,x y),[2,4,6],[3,4]) b:对应位置操作数类型不一致。map(lambdax,y:(x**y,x y),[2,4,6],[3,4,'a']) c:上面的情况只需要长度一致,类型一致即可如 map(lambdax,y:(x**y,x y),[2,4,6],[3,4,1]) 安装喜马拉雅app,搜索“光荣之路”可以收听吴老和他的朋友们分享的35小时测试知识语音 本文转载于微信公众号: 光荣之路(GloryRoadTrain),更多微信文章请扫描关注公众号: |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|