【python】18 |
您所在的位置:网站首页 › 匿名函数只能实现一个比较简单的功能 › 【python】18 |
【摘要】上一篇文章简析了函数的概念、4个参数以及作用域。本文旨在深入理解函数,掌握匿名函数以及sorted()函数的使用。 1.lamda匿名函数1.1 求和函数的匿名函数写法 通常情况下,如果我们要定义一个求和函数,需要以下几行代码 def sum(arg1:int, arg2:int)->int: #形参arg1和arg2的类型都是int型,返回值也是int型 return arg1 + arg2 print("运行结果: ", sum(1, 2)) print("运行结果: ", sum(3, 5))
lambda 形参:返回值 lambda函数能接收任何数量的参数但只能返回一个表达式的值 如果用匿名函数的形式来定义上面的求和函数,只需要一行 lambda_sum = lambda arg1, arg2 : arg1+arg2这里,虽然匿名函数没有名字,但是我们可以把其赋给一个变量。 print("匿名函数".center(50, '*')) lambda_sum = lambda arg1, arg2 : arg1+arg2 print("运行结果: ", lambda_sum(1, 2)) print("运行结果: ", lambda_sum(3, 5))
定义一个求幂方的函数,形参有两个值,num1是必选参数,num2是默认参数,默认值为2,在调用时如果不传num2的值,即求num1的平方。
这里我们定义了一个名为myFunc的函数,共有3个形参,第三个默认参数fun通过实参传进来的值对前两个必选参数num1和num2进行运算。 myFun(2, 3, lambda x, y: x + y) myFun(2, 3, lambda x, y: x * y) myFun(2, 3, lambda x, y: x ** y)第一行代码,我们给fun形参传入一个匿名函数 lambda x, y: x + y,返回值为x+y。 第二行代码,我们给fun形参传入一个匿名函数 lambda x, y: x * y,返回值为x*y。 第三行代码,我们给fun形参传入一个匿名函数 lambda x, y: x * *y,返回值为x**y。 2.1 列表的sort()方法 我们之前学习列表时,知道列表是有序的,并且带有sort()方法,可以帮助我们排序。 2.2 sorted()内置函数 还好python有内置方法sorted()函数,帮助我们解决了这么麻烦的排序。sorted()函数可以将一切可迭代对象排序
2.3 复杂的排序 假如我们现在有一个列表的嵌套,我们如何对其价格或者数量进行排序呢? key值是决定sorted()方法用什么排序,reverse的值代表正序逆序。 这里解释一下:我们给key值一个匿名函数lambda x: x[1],goods传进来是一个列表,x这个形参在这个列表中代表其中一个小列表,返回值是x[1]表示给key值返回的是每个小列表的第2个字段,即商品价格。又因为reverse=True,所以是根据商品价格的从大到小排序。 key值传入的是一个匿名函数lambda x:x[2],x表示列表中嵌套的小列表,又因为我们要对价格进行排序,因此是每个小列表中的第3个字段。从小到大排序,reverse就不需要再设置了,默认值为False。 调用这个函数,来显示我们之前的列表和根据价格从大到小排序之后的列表 pretty_show(goods) sort_goods = sorted(goods, key=lambda x: x[1], reverse=True) print("按照价格进行排序".center(30, '*')) pretty_show(sort_goods)按照商品数量进行排序之后的友好显示 sort_count_goods = sorted(goods, key=lambda x:x[2]) print("按照商品数量进行排序".center(30, '*')) pretty_show(sort_count_goods)
同样是上面的数据,但是我们选用字典这个数据结构来存储。如何实现根据商品的价格或者数量排序呢?
问题描述: 有一个整数列表(10个元素), 要求调整元素顺序,把所有的奇数放在前面,偶数放在后面。 现在假设我们有一个列表li,要如何把奇数放在前面,偶数放在后面呢? li = [30, 10, 21, 32, 45, 56, 23, 23, 23, 56] 其实用sorted()方法实现很简单。实现思路是:key值传入一个匿名函数,该函数实现的功能为判断奇偶数,如果是奇数返回值带0,如果是偶数返回值带1。再使用sorted排序,自然0在前(即奇数在前),1在后(即偶数在后)。 代码实现如下: li = [30, 10, 21, 32, 45, 56, 23, 23, 23, 56] print(sorted(li, key=lambda x: 1 if x % 2 == 0 else 0))key值接受的是匿名函数lambda x: 1 if x % 2 == 0 else 0 包含一个if三元运算符。如果x对2取余为0,表示x是个偶数,返回1;否则返回0。
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变; 在原始数组上进行移动操作, 勿创建新的数组; • 输入: 数组的记录;0 7 0 2 • 输出: 调整后数组的内容; 7 2 0 0 li = [0, 7, 0, 2] li.sort(key=lambda x: 1 if x == 0 else 0) print(li) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |