今天我们来学习一下匿名函数。在学习了上一节的自定义函数后,是时候了解一下匿名函数了。他们往往非常简短,就一行,而且有个关键字:lambda。这就是弥明函数。

一.匿名函数基础

匿名函数的基本格式是这样的:

lambda argument1,argument2,argument3,...,argumentN:expression

lambda后紧跟的是参数,冒号后是表达式。举个例子来说明用法

>>> fun = lambda x:x**2
>>> fun(4)
16

这里的匿名函数只包含了一个参数x,输出则是这个数的平方,如果不用匿名函数的方法是这样的

>>> def fun(x):
... return x**2
>>> fun(4)
16

可以看出来匿名函数和常规函数一样,都是一个函数对象(function object),他们的用法也很相似,不过还是有一些区别的:

  1.lambda是一个表达式(expression)而不是一个语句(statement)。所谓表达式,就是用一系列公式去表达一个东西,比如x+2;而语句就是完成了某些功能比如赋值语句x = 2完成了赋值,print完成了打印等。所以lambda可以用在一些常规函数无法使用的地方,比如一个列表内部,而常规函数就不可以。

>>> l = [(lambda x:x*x)(x) for x in range(10)]
>>> l
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  或者在PyQt里,也常常用lambda来作为槽函数可以直接使用,比方有三个按钮,每次按下时打印‘按钮1/2/3被按下’

import sys
from PyQt5.Qt import *
app = QApplication(sys.argv)
window = QWidget()
window.resize(800,600)
btn_1 = QPushButton('',window)
btn_2 = QPushButton('',window)
btn_3 = QPushButton('',window)
btn_1.move(100,200)
btn_2.move(100,250)
btn_3.move(100,300) btn_1.clicked.connect(lambda :print('btn1 is clicked'))
btn_2.clicked.connect(lambda :print('btn2 is clicked'))
btn_3.clicked.connect(lambda :print('btn3 is clicked'))

在这里用匿名函数就要比为每个信号定义个槽函数要方便的多

def fun_1():
print('btn1 is clicked')
def fun_2():
print('btn2 is clicked')
def fun_3():
print('btn3 is clicked') btn_1.clicked.connect(fun_1)
btn_2.clicked.connect(fun_2)
btn_3.clicked.connect(fun_3)

  2.lambda的主体是只有一行的简单表达式,并不能扩展成一个多行的代码。其实是出于设计的考虑,lambda和def应该各司其职:前者专注于简单的任务,而后者负责更复杂的多行的逻辑。python之父龟叔有一篇文章就是讲的关于这个的。

总结

  我们使用函数的目的就是这两点:

    1.减少代码的重复性;

    2.模块化代码

  但是如果一个很简单的逻辑功能只是被调用一次或频率很低,就可以用匿名函数解决。

Python核心技术与实战——八|匿名函数的更多相关文章

  1. Python核心技术与实战——七|自定义函数

    我们前面用的代码都是比较简单的脚本,而实际工作中是没有人把整个一个功能从头写到尾按顺序堆到一块的.一个规范的值得借鉴的Python程序,除非代码量很少(10行20行左右)应该由多个函数组成,这样的代码 ...

  2. python全栈开发之匿名函数和递归函数

    python 匿名函数和递归函数 python全栈开发,匿名函数,递归函数 匿名函数 lambda函数也叫匿名函数,即函数没有具体的名称.是为了解决一些功能很简单需求而设计的一句话函数.如下: #这段 ...

  3. Python核心技术与实战——十九|一起看看Python全局解释器锁GIL

    我们在前面的几节课里讲了Python的并发编程的特性,也了解了多线程编程.事实上,Python的多线程有一个非常重要的话题——GIL(Global Interpreter Lock).我们今天就来讲一 ...

  4. Python核心技术与实战 笔记

    基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列 ...

  5. Python核心技术与实战——六|异常处理

    和其他语言一样,Python中的异常处理是很重要的机制和代码规范. 一.错误与异常 通常来说程序中的错误分为两种,一种是语法错误,另一种是异常.首先要了解错误和异常的区别和联系. 语法错误比较容易理解 ...

  6. Py修行路 python基础 (十三)匿名函数 与 内置函数

    一.匿名函数  1.定义: 匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序. 2.语法格式:lambda 参数:表达式 lambda语句中,开头先写关键字lambda,冒号前是 ...

  7. Python全栈学习:匿名函数使用规范

    匿名函数,当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x) ...

  8. python递归函数、二分法、匿名函数、(sorted、map、filter内置函数应用)

    #函数递归是一种特殊的函数嵌套调用,在调用一个函数的过程中,又直接或间接的调用该函数本身递归必须要有两个明确的阶段: 递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少 回溯:递 ...

  9. Python(十) 函数式编程: 匿名函数、高阶函数、装饰器

    一.lambda表达式 lambda parameter_list: expression # 匿名函数 def add(x,y): return x+y print(add(1,2)) f = la ...

随机推荐

  1. ES排序值相同顺序随机的问题

    ES排序值相同顺序随机的问题 code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: ...

  2. 转载 用ShadowVolume画模型的影子

    阅读目录(Content) Shadow Volume 包围盒 动态生成包围盒 判断 多光源下的阴影 总结 问题 CSharpGL(48)用ShadowVolume画模型的影子 回到顶部(go to ...

  3. 3,、maven修改jar包下载为国内镜像下载地址

    maven 默认的中央仓库是在国外的服务器,下载速度慢,有时候稍不注意就下载出错 通常我将maven的中央仓库修改为阿里云的地址,下载速度很快体验非常好 修改conf下的setting.xml文件 在 ...

  4. leetcode 27. 移除元素(python)

    1. 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外 ...

  5. 2018 icpc 沈阳

    https://codeforces.com/gym/101955 J 签到 #include<iostream> #include<cstring> #include< ...

  6. 禁止SYS和SYSTEM用户远程登录Oracle oracle的sys和system默认密码

    alter system set remote_login_passwordfile=none scope=spfile; system默认:manager sys默认:change_on_insta ...

  7. chrome 74 版本的chromedriver下载地址

    微信扫二维码关注我的公众号,回复chromedriver 即可获取windows,liunx,mac版本最新selenium-chromedriver

  8. python3--udp/TCP笔记和实践

    UDP协议: UDP (User Datagram Protocol, 用户数据报协议) 是一种无连接,不可靠,基于数据的传输层通信协议. UDP的通信过程与TCP相比比较为简单, 不需要复杂的三次握 ...

  9. xmake新增对Qt编译环境支持

    在最新的xmake v2.2.1版本中,新增了对Qt SDK环境的支持,我们完全可以脱离Qt Creater进行Qt应用程序的开发,甚至配合vscode/idea等编辑器+xmake插件(xmake- ...

  10. ELk架构解析和部署

    目录 一.什么是elk. 1 二.ELK 常用架构及使用场景介绍... 2 1.最简单架构... 2 2.以Logstash 作为日志搜集器... 2 3.以Beats 作为日志搜集器... 3 4. ...