Python中lambda表达式的常见用法

非常抱歉,昨天发的代码中有一处小错误,已通过留言的方式进行了纠正,详情请见【详解Python列表推导式】

lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数。lambda表达式只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,并支持默认值参数和关键参数,该表达式的计算结果相当于函数的返回值。下面的代码演示了不同情况下lambda表达式的应用。

>>> f = lambda x, y, z: x+y+z

#把lambda表达式当做函数使用

>>> print(f(1, 2, 3))

6

#使用lambda表达式定义带有默认值参数的函数

>>> g = lambda x, y=2, z=3: x+y+z

>>> print(g(1))

6

#调用时使用关键参数

>>> print(g(2, z=4, y=5))

11

>>> L=[(lambda x: x**2), (lambda x: x**3), (lambda x: x**4)]

>>> print(L[0](2), L[1](2), L[2](2))

4 8 16

#lambda表达式可以作为字典的“值”

>>> D={'f1':(lambda: 2+3), 'f2':(lambda: 2*3), 'f3':(lambda: 2**3)}

>>> print(D['f1'](), D['f2'](), D['f3']())

5 6 8

>>> L=[1, 2, 3, 4, 5]

#没有名字的lambda表达式,作为函数参数

>>> print(map((lambda x: x+10), L))

[11, 12, 13, 14, 15]

>>> L

[1, 2, 3, 4, 5]

>>> def demo(n):

return n*n

>>> demo(5)

25

>>> a_list = [1, 2, 3, 4, 5]

#在lambda表达式中可以调用其他函数

>>> map(lambda x: demo(x), a_list)

[1, 4, 9, 16, 25]

#生成20个数,0-19

>>> data = list(range(20))

>>> print(data)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

>>> import random

#随机打乱顺序

>>> random.shuffle(data)

>>> data

[4, 3, 11, 13, 12, 15, 9, 2, 10, 6, 19, 18, 14, 8, 0, 7, 5, 17, 1, 16]

#使用lambda表达式指定排序规则

>>> data.sort(key=lambda x: len(str(x)))

>>> data

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

#使用lambda表达式指定排序规则

>>> data.sort(key=lambda x: len(str(x)), reverse=True)

>>> data

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> from random import randrange

#使用列表推导式生成7行5列二维随机数据

#每个数字在[1,10)范围内

>>> lst = [[randrange(1, 10) for i in range(5)] for j in range(7)]

>>> for item in lst:

print(item)

[9, 9, 5, 6, 7]

[7, 3, 5, 5, 6]

[3, 5, 3, 5, 3]

[4, 7, 6, 9, 8]

[6, 4, 1, 4, 1]

[9, 7, 8, 9, 4]

[9, 1, 8, 6, 9]

#首先按第3列从小到大排序

#第3列一样的按第5列从小到大排序

>>> lst.sort(key=lambda item: (item[2], item[4]))

>>> for item in lst:

print(item)

[6, 4, 1, 4, 1]

[3, 5, 3, 5, 3]

[7, 3, 5, 5, 6]

[9, 9, 5, 6, 7]

[4, 7, 6, 9, 8]

[9, 7, 8, 9, 4]

[9, 1, 8, 6, 9]

本文内容节选自《Python程序设计》(第2版),董付国编著,清华大学出版社,2016年6月出版,2016年11月第二次印刷。

本文分享自微信公众号 - Python小屋(Python_xiaowu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版5.8节C风格数据结构内存布局之结构体数组结构体coredump

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

9810
来自专栏数据结构与算法

P3373 【模板】线段树 2 区间求和 区间乘 区间加

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输...

424110
来自专栏数据结构与算法

计数排序

算法思想 编辑 计数排序对输入的数据有附加的限制条件: 1、输入的线性表的元素属于有限偏序集S; 2、设输入的线性表的长度为n,|S|=k(表示集合S中元素...

312100
来自专栏企鹅号快讯

1.12编程基础之函数与过程抽象/05:统计单词数

总时间限制: 1000ms 内存限制: 65536kB 描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单...

292100
来自专栏vue学习

JS数据结构与算法-队列

12110
来自专栏猿人谷

成员以其在类中声明的顺序构造

分析以下代码的输出: #include<iostream> using namespace std; class A { public: A(int j):...

20960
来自专栏数据结构与算法

1341 与3和5无关的数

1341 与3和5无关的数 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description ...

29540
来自专栏人工智能LeadAI

Python中对字节流/二进制流的操作:struct模块简易使用教程

前言 前段时间使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块。查了网上挺多教程都写的挺好的,...

60750
来自专栏Vamei实验室

Python补充05 字符串格式化 (%操作符)

在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字符串进行格式化的操作%。 模板 格式化字符串时...

25290
来自专栏CodingToDie

Python学习(三): 列表(list)和流程控制

第3 章 列表(list)和流程控制 Table of Contents 列表 顺序执行 条件判断 循环 小例子 列表 相信大家在其他语言中都使用过 列表,在 ...

39750

扫码关注云+社区

领取腾讯云代金券