函数编程——匿名函数与lambda(一)
python允许用lambda关键字创造匿名函数。
匿名函数是因为不需要以标准的方式来声明,比如说,使用def语句。
但是,作为函数,它们也能有参数。
一个完整的lambda“语句”代表了一个表达式,这个表达式的定义体必须和声明放在同一行。
参数时可选的,如果使用参数的话,参数通常也是表达式的一部分。
核心知识点:
用合适的表达式调用一个lambda生成一个可以像其他函数一样使用的函数对象。
它们可以被传给其他函数,用额外的引用别名化,作为容器对象以及可调用的对象被调用。(如果需要,可以带参数)
当被调用的时候,如果给定相同的参数的话,这些对象会生成一个和相同表达式等阶的结果。
它们和那些等价表达式计算值相同的函数是不能区分的。
可以来看个简单的例子:
>>> def true():
... return True
... >>> lambda:True
<function <lambda> at 0x000002B6A99BBF28>
>>> TRUE = lambda:True #上面都是创建两个总是返回True的函数
>>> true()
True >>> TRUE()
True
#可以发现结果完全是相同的
上面的例子说明,使用匿名函数完全是行得通的。
我们还可以将lambda表达式赋值给一个如列表和元祖的数据结构,同时默认以及可变的参数也是允许的。
>>> def kebi(x,y=2): #我可以设置默认值
... return x+y
... >>> a = lambda x,y =2:x+y #我也可以设置默认值 #上面两个函数功能一样 >>> def maoxian(*z):return z #参数收集返回元祖
...
>>>
>>> b = lambda *z:z #收集我也可以 #上面两个函数功能也一样 #光说不练可不行
>>> a(3) #有默认值
5
>>> a(4,5)
9
>>> kebi(3)
5
>>> kebi(4,5)
9 >>> maoxian(1,2,'z','iu13') #函数定义的只有一个参数,却可以收集多个到一个元祖里面
(1, 2, 'z', 'iu13')
>>> b(1,2,'z','iu13')
(1, 2, 'z', 'iu13')
最后再来阐述一个问题,为什么要给函数赋值一个变量?
>>> a = lambda x,y =2:x+y
之前在使用传统函数的总是不明白为啥要赋值?
我们可以把每个函数看作是一个对象,漂浮在内存中。
我们虽然创建了一个函数,但没有地方保存它,也没有调用它。
这个函数在创建的时候引用计数被设置为True,但是如果,没有引用,计数又会回到零,这样就会被垃圾回收。
为了保存对象,可以把它赋值到一个变量上,以后也就可以随时调用,也不会自动被删除了。
函数编程——匿名函数与lambda(一)的更多相关文章
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- 匿名函数:Lambda表达式和匿名方法
匿名函数一个"内联"语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. 共有两种匿名函数: Lamb ...
- 3 委托、匿名函数、lambda表达式
委托.匿名函数.lambda表达式 在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法.C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表达式取代了匿名方 ...
- 用委托、匿名函数、Lambda的方式输出符合要求的数
最近看了一些博客,对委托和匿名函数和Lambda的方式有了一些更深的理解,在前人的基础上.我也写3个例子 using System; using System.Collections.Generic; ...
- C#语法之匿名函数和Lambda表达式
上一篇博客主要是对委托和事件做了一小结,这篇是在上一篇博客的基础上对匿名函数和Lambda表达式小结.还是接着上一篇说起,在上一篇中也说了委托是一种数据结构,主要是解决让函数作为参数的问题.在使用委托 ...
- python基础----内置函数----匿名函数(lambda)
Python3版本所有的内置函数: 1. abs() 获取绝对值 >>> abs(-) >>> abs() >>> abs() >>& ...
- 匿名函数、lambda表达式
匿名函数 func = lambda x: y #x是形参,y是返回值 键字lambda表示匿名函数,冒号前面的x表示函数参数,冒号后面的y表示匿名函数的返回值. 例1:返回列表中长度大于等于3的元素 ...
- 测开之路八十二:匿名函数:lambda表达式
# 匿名函数:lambda表达式# lambda 参数: 逻辑f = lambda name: print(name)f('tom') f2 = lambda x, y: x + yprint(f2( ...
- [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式
引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...
随机推荐
- SQL注入-数据库判断
0x01.sql注入 sql注入是在系统开发的过程中程序员编程不规范,我们可以通过把SQL语句插入到WEB表单中进行查询字符串,最终达成欺骗服务器执行恶意的SQL命令.对于现在的网站SQL注入越来越严 ...
- 谁是云的王者?OpenStack与VMware优劣对比
[编者按]在云计算生态系统中,有两种类型的用户需要使用云计算资源:传统型(Traditional IT applications)和在互联网大潮下逐渐崛起云计算应用型(Cloud-aware appl ...
- 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(一):WebDriverAgent安装
此篇介绍如何安装WebDriverAgent,下一篇介绍facebook-wda库的安装使用以及自动化脚本的开发. 前言: 对于iOS的应用的测试,如果不需要用到图像识别,推荐使用这个项目facebo ...
- apple touch icon 大小总结
<!-- For Chrome for Android: --> <link rel="icon" sizes="192x192" href= ...
- Python urllib的urlretrieve()函数解析 (显示下载进度)
#!/usr/bin/python #encoding:utf-8 import urllib import os def Schedule(a,b,c): ''''' a:已经下载的数据块 b:数据 ...
- WPF的本质:数据和行为
如果自己来做一个UI框架,我们会首先关注哪些方面?我想UI框架主要处理的一定包括两个主要层次的内容,一个是数据展现,另一个就是数据操作,所以UI框架必须能够接收各种不同的数据并通过UI界面展现出来,然 ...
- android自定义View_2——Making the View Interactive
前言:绘制出一个view只是自定义view的一个部分,还需要自定义一些view的行为,来反馈用户的使用操作,反馈的 行为要合理性,就像真是的物理世界一样,不要太玄幻哦. 可以将view的行为封装到in ...
- poj3481(splay tree 入门题)
平衡树都能做. // // main.cpp // splay // // Created by 陈加寿 on 16/3/25. // Copyright © 2016年 chenhuan001. A ...
- 《从零开始学Swift》学习笔记(Day5)——我所知道的标识符和关键字
Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字 原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整 ...
- mysql中对应oracle中的to_char()和to_number()函数
TO_CHAR(): CAST(123 AS CHAR(3)) TO_NUMBER(): cast( '123 ' as SIGNED INTEGER)