lambda匿名函数和他的小伙伴(处理大量数据的时候用到)
lambda匿名函数
主要是为了解决一些简单的需求而设计的一句话函数
#计算n的n次方
def func(n):
return n**n
print(func(3)) # f = lambda n : n ** n
print(func(3)) #
语法: 函数名 = lambda 参数 : 返回值
注意:
- 函数的参数可以有多个, 多个参数之间用逗号分开
- 匿名函数不管多复杂, 只能写一行, 并且逻辑结束后直接返回数据
- 返回值和正常的函数一样,可以是任意数据类型.

x = lambda a,b : a+b
print(x(1,4)) #
匿名函数lambda的函数名是a, 之所叫匿名函数是因为通过__name__查的时候用的都是统一的名字lambda,这一点和普通函数不一样
def func(n):
return n*n a = lambda n : n * n
print(a(5)) # print(func.__name__) #查看函数的名字 func
print(a.__name__) #<lambda>
对比一下查到的函数名
lambda函数中的一个坑,面试很常见
普通函数
def func(x,y):
return x,y
print(func(1,2)) #(1,2) 返回的是一个元组, 但是通过lambda怎么实现呢? lmd1 = lambda x,y : x , y
print(lmd1(1,2)) #NameError: name 'y' is not defined
结果会报错, 因为程序会把这个lambda表达式看成一个元组:
第一个元素是 lambda x,y : x
第二个元素是 y 怎么可以实现普通函数一样的结果呢 lmd2 = lambda x, y : (x,y)
print(lmd2(1,2)) #(1,2)
sorted() 排序函数
语法: sorted(iterable, key=None, reverse=False)
iterable: 可迭代对象
key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数
根据函数的运算结果进行排序
reverse: 是否要倒序. True就是倒序
之前讲过普通数列的排序
lst = [11,9,23,13,43,19,8]
lst.sort() #list的方法
print(lst) #[8, 9, 11, 13, 19, 23, 43]
内置函数sorted() 提供的通用的排序方法 所有的可迭代的对象都能用 lst = [11,9,23,13,43,19,8]
s = sorted(lst)
print(s) dic = {1:"a",3:"c",2:"b"}
dic2 = sorted(dic)
print(dic2) #[1, 2, 3] 对于字典返回的是key值的排序
sorted()和函数组合使用
按照字符串的长度排序
lst = ["西游记","三国演义","葫芦娃","亮剑"]
def func(s):
return len(s) ll = sorted(lst, key=func, reverse=True) #加上reverse就会反向排序
print(ll) #['三国演义', '西游记', '葫芦娃', '亮剑'] key是排序方案,sorted函数内部会把可迭代对象中的每一个元素拿出来交给后面的key
后面的key算出一个数字,作为当前这个元素的权重,整个函数根据权重重新排序
sorted() 和lambda配合使用
lst = [{"name":"汪峰","age":48},
{"name":"章子怡", "age":30},
{"name":"alex123","age":33}
]
def func(el):
return el["age"]
ll = sorted(lst, key=func) #和普通函数一起使用 根据年纪排序
print(ll)
#[{'name': '章子怡', 'age': 30}, {'name': 'alex', 'age': 33}, {'name': '汪峰', 'age': 48}]
l2 = sorted(lst, key=lambda el: el["age"], reverse=True) #根据年纪 倒序排列 从大到小
print(l2)
#[{'name': '汪峰', 'age': 48}, {'name': 'alex', 'age': 33}, {'name': '章子怡', 'age': 30}]
l3 = sorted(lst, key=lambda el: len(el["name"]), reverse=True) #根据名字的长度
print(l3)
#[{'name': 'alex', 'age': 33}, {'name': '章子怡', 'age': 30}, {'name': '汪峰', 'age': 48}]
filter()筛选函数
语法: filter(function, iterable)
function:用来筛选的函数. 在filter中会自动把iterable中的元素传递给函数,然后函数根据返回的True或者Fasle判断是否保留这个数
iterable: 可迭代对象

#把iterable里的每一个值传递给func,判断True 还是False, 最后把判断结果是True的返回
#把姓张的名字过滤掉 lst = ["张无忌", "张铁林", "赵一宁", "石可心","马大帅"]
f = filter(lambda el: el[0] != "张",lst)
# print(f) #<filter object at 0x01CE5690>
# print("__iter__" in dir(f))#True 判断一下f 是不是可以迭代对象
for i in f:
print(i)
结果:
赵一宁
石可心
马大帅
#当func是None的时候, 过滤出来的是可迭代对象里面的不为空的值
lst = [1,2,3,4,[],{},None]
f = filter(None,lst)
for i in f:
print(i)
结果是
1
2
3
4
map() 映射函数
语法: map(function, iterable) 对可迭代对象中的每一个元素进行映射, 分别取值执行function
#计算相同位置的和 和zip()一样有水桶效应 根据list中元素少的那个计算求和
lst = [1,3,5,7,9]
lst2 = [2,4,6,8,10]
m = map(lambda x,y: x+y, lst,lst2)
print(list(m)) #[3, 7, 11, 15, 19]
计算列表中每个元素的平方,返回一个新列表
print(list(map(lambda x: x * x, [1,2,3,4])))
#[1, 4, 9, 16]
lambda匿名函数和他的小伙伴(处理大量数据的时候用到)的更多相关文章
- lambda匿名函数透析
lambda匿名函数透析 目录 1 匿名函数的作用... 1 2 匿名函数的格式... 1 3 匿名函数实例代码... 3 1 匿名函数的作用 ...
- lambda 匿名函数
# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...
- lambda 形参:返回值 lambda 匿名函数 格式:
lambda 匿名函数 格式: lambda 形参:返回值 e.g f = lambda n:n**2 print(f(10))
- Python 进阶 之 lambda 匿名函数
lambda 是个匿名函数,通常用于简单判断或者处理,例如判断一个数的奇偶性,过滤字符串,逻辑运算等等. lambda表达式: >>>lambda x:x*x >>> ...
- xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式
import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...
- lambda匿名函数,sorted(),filter(),map(),递归函数
1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...
- python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件
上节课总结 1.三元运算 name=“name1”if 条件 else “name2” 2.深浅拷贝 数字.字符串 深浅,都一样 2.其他 浅拷贝:只拷贝第一层 深拷贝:不拷贝最后一层 3.set集合 ...
- Python 之父为什么嫌弃 lambda 匿名函数?
Python 支持 lambda 匿名函数,其扩展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" ...
- Java中的lambda匿名函数使用
Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...
随机推荐
- DOM解析xml实现读、写、增、删、改
qt提供了三种方式解析xml,不过如果想实现对xml文件进行增.删.改等操作,还是DOM方式最方便. 项目配置 pro文件里面添加QT+=xml include <QtXml>,也可以in ...
- Gradle编译失败 generating the main dex list
编译打包的时候出现这个错误,信息很少. * What went wrong: Execution failed for task ':camCard_Asia_Trunk:transformClass ...
- Android零基础入门第76节:Activity数据保存和横竖屏切换
在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看 ...
- 插件化一(android)
插件化设计概述(android) 一. 模块划分 Basic模块包括:初始化接口.插件加载接口.插件更新接口和埋点接口. a) 初始化接口:完成一些必要的初始化 ...
- 通过内核对象在服务程序和桌面程序之间通信的小问题 good
关于在通过 事件对象 在服务程序和普通桌面应用程序相互之间通信的问题,分类情况进行讨论:1.普通桌面应用程序中创建事件,服务程序中打开事件 XP的情况普通桌面应用程序中创建: m_hEvent = : ...
- Java的Qt绑定 jambi
大二在学java,所以有时会写点java的小程序,可是习惯了qt的界面,使用AWT和swing让我有些不适,后来发现了jambi,才知道原来早就有了java的绑定版,所以迫不及待的安装了上. ...
- 浅谈js闭包(closure)
相信很多从事js开发的朋友都或多或少了解一些有关js闭包(closure)的知识. 本篇文章是从小编个人角度,简单地介绍一下有关js闭包(closure)的相关知识.目的是帮助一些对js开发经验不是很 ...
- Geoserver发布Image Mossaic图层
1数据准备:请事先在arcgis desktop软件中将栅格数据拼接完毕,并为每一幅影像生成一个prj文件,坐标系一定是要有的,不然Mossaic图层发布不了. 2."数据存储“->& ...
- Java基础(四) StringBuffer、StringBuilder原理浅析
StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础 ...
- spring boot自定义配置文件
把一些可能会经常变动的东西写在配置文件中,可以增加程序的灵活性,避免多次改版发版. 在sping boot中除了自带的默认配置文件application.properties之外,我们还可以在reso ...