首页 > 编程语言 >python系列教程208——为什么使用lambda

python系列教程208——为什么使用lambda

时间:2023-04-02 18:00:53浏览次数:41  
标签:return 函数 python 208 代码 print def lambda

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

通常来说,lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。在你仅需要嵌入小段可执行代码的情况下它们会带来一个更简洁的代码结构。

lambda通常用来编写跳转表(jump table),也就是行为的列表或字典,能够按照需要执行相应的动作。如下段代码所示。

L = [lambda x: x ** 2,        # Inline function definition

     lambda x: x ** 3,

     lambda x: x ** 4]         # A list of 3 callable functions




for f in L:

    print(f(2))                # Prints 4,8,16




print(L[0](3))                 # Prints 9

当需要把小段的可执行代码编写进def语句从语法上不能编写进的地方时,lambda表达式作为def的一种速写来说是最为有用的。例如,上面的代码片段,通过在列表常量中嵌入lambda表达式创建一个含有三个函数的列表。对等的def代码可能需要在想要使用的环境之外有临时性函数名称和函数定义。

def f1(x): return x ** 2

def f2(x): return x ** 3       # Define named functions

def f3(x): return x ** 4




L = [f1,f2,f3]               # Reference by name




for f in L:

    print(f(2))                # Prints 4,8,16




print(L[0](3))                 # Prints 9

实际上,我们可以用Python中的字典或者其他的数据结构来构建更多种类的行为表,从而做同样的事情。下面给出另一个例子:

>>>key = 'got'

>>>{'already': (lambda: 2 + 2),

...'got':      (lambda: 2 * 4),

...'one':      (lambda: 2 ** 6)}[key]

name




for f in L:

    print(f(2))                # Prints 4,8,16




print(L[0](3))                 # Prints 9

这里,当Python创建这个字典的时候,每个嵌套的lambda都生成并留下了一个在之后能够调用的函数。如果不是用lambda做这种工作,需要使用三个文件中其他地方出现过的def语句来替代,也就是在这些函数将会使用的那个字典外的某处需要定义这些函数。

>>>def f1(): return 2 + 2...

>>>def f2(): return 2 * 4

...

>>>def f3(): return 2 ** 6

...

>>>key = 'one'

>>>{'already': f1,'got': f2,'one': f3}[key]()

64

同样,上面代码会实现相同的功能,但是def也许会出现在文件中的任意位置,即使它们只有很少的代码。类似刚才lambda的代码,提供了一种特别有用的可以在单个情况出现的函数:如果这里的三个函数不会在其他的地方使用到,那么将它们的定义作为lambda嵌入在字典中就是很合理的了。不仅如此,def格式要求为这些小函数创建变量名,这些变量名也许会与这个文件中的其他变量名发生冲突。

标签:return,函数,python,208,代码,print,def,lambda
From: https://blog.51cto.com/captainbed/6164947

相关文章

  • Python基础之pyautogui模块(详细总结鼠标键盘操作)
    来源:https://zhuanlan.zhihu.com/p/471275277仅用于个人学习(以防自己忘记)1.GUI控制功能控制鼠标键盘使用的模块为:pyautogui,这个模块操作起鼠标键盘的时候,非常的迅速,而且如果该模块控制了鼠标后,程序比较难关闭,这时我们有两个方法专门针对以上的情况:1.1自动防故障功能 ......
  • 用OpenCv-Python自带的LBPH识别器实现简单人脸识别(上)
    用OpenCv-Python自带的LBPH识别器实现简单人脸识别(上)引言:本文开发环境为:Windows10+phchram+Anaconda5.2(Python3.6)+Opencv4.5.5,用opencv-contrib原生的API完成了人脸识别的功能,其可以任意添加人脸ID数据,但其效果比较差(勉强能用),如果日后有时间的话,给大家出一期(挖坑)利......
  • 用OpenCv-Python自带的LBPH识别器实现简单人脸识别(下)
    介绍本文附录了通过LBPH实现简单人脸识别的源代码,分类效果并不是很好,供个人学习使用。人脸录入.pyimportcv2cap=cv2.VideoCapture(0)flag=1num=0while(cap.isOpened()):ret_flag,Vshow=cap.read()cv2.imshow("Capture_Test",Vshow)k=cv2.w......
  • javascript VS python 变量作用域
    js中函数内部默认是可以读取到外部声明的变量,python不可以,必须使用关键字globalglobal必须在函数内部使用,用以内化函数外部变量。在函数外部是无法声明全局变量的,或者说所谓的全局变量在函数内部是不好使的,这还叫什么全局变量?应该叫局外变量。而global是内部跟局外变量建立一种......
  • 孤狼老师-接口测试自动化(Python版完整版)-日志记录&测试报告
            此时,由于每次执行方法前,都会执行一遍setup,故每次都要初始化一次LoggerHelper方法,每次都会加载一次配置文件,优化LoggerHelper:        针对多个接口用例,使用如下方式:   ......
  • Python使用rtlsdr
    1.打开命令行  也可以在Spyder中的控制台中2.安装rtlsdrpipinstallpyrtlsdr3.下载驱动动态库https://ftp.osmocom.org/binaries/windows/rtl-sdr/因为python是64位的,所以驱动也要下载64位的 下载最新的即可4.这三个就是我们需要的驱动  5.将三个驱动复制......
  • 【Linux Centos】如何卸载自带的python和yum以及卸载后如何重新安装yum
    【LinuxCentos】如何卸载自带的python和yum以及卸载后如何重新安装yum注意如果不是必要情况,请不要卸载服务器自带的python,因为yum等命令都会用到python库,卸载以后可能造成不良后果。如果只是觉得系统python版本不合适,想安装新版本,建议安装anaconda或miniconda,在不同的环境中使......
  • python从入门到实践第16章 下载数据1
    第一步获取csv格式文件需要python爬虫的相关知识 第二步 先打印第一行观察标签importcsvfilename='data/sitka_weather_2014.csv'withopen(filename)asf:reader=csv.reader(f)header_row=next(reader)print(header_row)['AKST','MaxTempe......
  • Python遍历时删除元素问题(附深拷贝与浅拷贝介绍)
    问题有时候,我们希望用Python遍历一个列表(或其他可迭代对象),如果其中有我们不需要的元素就把它删除并继续遍历。如以下代码段,我们本希望打印1、3,可最后却只打印了1。a=[1,2,3]foriina:ifi==2:a.remove(i)else:print(i)分析其实,之所以......
  • python面向对象进阶
    面向对象进阶类型判断issubclasstypeisinstance反射反射的四个函数importlib类的其他成员__str____repr____format____del____dict__和__slots____item__系列__init____new____call____doc____iter__和__next____ente......