Python匿名函数(lambda函数)
时间:2019-09-22
本文章向大家介绍Python匿名函数(lambda函数),主要包括Python匿名函数(lambda函数)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
匿名函数 —— 一行函数
lambda —— 关键字
x是普通函数的形参(位置,关键字...)可以不接收参数(x可以不写)
:x是普通函数的函数值(只能返回一个数据类型)(:x返回值必须写)
1)此函数不是没有名字,他是有名字的,他的名字就叫做lambda
2)lambda 是定义匿名函数的关键字,相当于函数的def.
3)lambda 后面直接加形参,形参加多少都可以,只要用逗号隔开就行。
func = lambda a, b, *args, sex='alex', c, **kwargs: kwargs
print(func(3, 4, c=666, name='alex'))
结果:{'name': 'alex'}
# 所有类型的形参都可以加,但是一般使用匿名函数只是加位置参数,其他的用不到。
把匿名函数拆开写,如下
def func(a, b, *args, sex='alex', c, **kwargs):
return kwargs
a = func(3, 4, c=666, name='alex')
print(a)
结果:{'name': 'alex'}
4)返回值在冒号之后设置,返回值和正常的函数一样,可以是任意数据类型。(但是想要返回多个元素要以容器的形式返回)
5)匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据
格式:lambda x:x
print((lambda x: x + 6)(5))
结果:11
def func(x):
return x + 6
print(func(5))
结果:11
此处使用列表推导式,返回值是地址
lst = [lambda :i for i in range(5)]
print(lst)
拆解成函数:
lis = []
for i in range(5):
def func():
return i
a = func
lis.append(a)
print(lis)
结果:[<function func at 0x0000029E97472378>, <function func at 0x0000029E97472400>, <function func at 0x0000029E97472488>, <function func at 0x0000029E97472510>, <function func at 0x0000029E97472598>]
lambda表达式是可以嵌套的
action = (lambdax : (lambda y : x + y))
a = action(10)
a(5)
结果:15
这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量。
匿名函数的使用
匿名函数通常被用作高阶函数(higher-order function,参数为函数的函数)的参数。比如,几个内置函数:filter(),map(),reduce()。下面我们分别看看这几个函数的用法及达到相同效果的python另一种特征的用法
filter函数
lis = [1, 2, 3, 4]
re = filter(lambda x: x % 2 == 0, lis)
print(list(re))
result1 = [x for x in lis if x % 2 == 0]
print(result1)
结果:[2,4]
[2,4]
map函数
lis = [1, 2, 3]
result = map(lambda x: x*2, lis) # 使用lambda函数
print(list(result))
result1 = [x*2 for x in lis] #使用列表推导式
print(result1)
结果:[2, 4, 6]
[2, 4, 6]
reduce函数
from functools import reduce
lis = [1, 2, 3, 4]
result = reduce(lambda x, y: x+y, lis)
print(result)
结果:10
在Python2.x版本中recude是直接 import就可以的, Python3.x版本中需要从functools这个包中导入
除reduce函数的替代用法比较特殊外,map和filter函数都可以使用列表推导式代替。据说,龟叔本打算将 lambda 和 reduce 都从全局名字空间都移除, 舆论说龟叔不喜lambda 和 reduce最后lambda没删除是因为和一个人给龟叔写了好多封,进行交流然后把lambda保住了
原文地址:https://www.cnblogs.com/shenhongbo/p/11566976.html
- Android系统层Watchdog机制源码分析
- 算法之插入排序
- Android Studio环境下搭建ReactNative
- Android实现两个ScrollView互相联动,同步滚动的效果
- 一个可以拖动的自定义Gridview代码
- android图片加载库Glide
- 密码最短长度为7,其中必须包含以下非字母数字字符1 完美解决方案
- android开发性能分析
- url带中文参数显示乱码的问题
- 转换程序的一些问题:设置为 OFF 时,不能为表 'Test' 中的标识列插入显式值。8cad0260
- JQuery 对控件的事件操作
- 流畅地HtmlHelper-Asp.Net MVC
- 用Sql生成数据插入Sql脚本
- 利用反射自己写的一个ModelHelper类
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法