首页 存档 技术 查看内容

光荣之路测试开发之python学习-第16讲 条件语句2

2018-3-30 13:00 |来自: 互联网 287 0

摘要: 吴老的《selenium webdriver 实战宝典》出版了! 一.学习内容 * lambda函数 * map函数 二.lambda函数 1.函数说明 lambda语句被用来创建新的函数对象,并且在运行时返回它们; Python使用lambda关键字来创建匿名函 ...

吴老的《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")时,则spythons*3为重复3python,然后返回结果

当调用data(5)时,则s5s*35*3可以直接计算得到结果15,然后返回结果。

当然如果不想使用定义的make_repeater()函数,想只用lambda函数,我们也可以这样写:

data=lambda s,n:s*n

data ('python',3)

data(5,3)

这样是不是方便很多呢,传入两个参数sn,然后执行表达式s*n,并返回计算结果。

5.练习四:lambda表达式会返回一个函数对象,如果没有变量接受这个返回值,它很快就会被丢弃,也正是由于lambda只是一个表达式,所以它可以直接作为listdict等成员

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])


这里用了maplambda两个函数,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函数-两数求值问题注意
amap无法处理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小时测试知识语音


光荣之路
软件测试培训








官网:www.gloryroad.cn
微信公众号:gloryroadtrain
性能测试QQ群:415987441
测试招聘QQ群: 203715128
Java2群:569534627
Python群:457561756
咨询V信:mengqiao626
咨询QQ:53617154

公开课大讲堂:413908278



本文转载于微信公众号: 光荣之路(GloryRoadTrain),更多微信文章请扫描关注公众号:

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部