Python基础之lambda表达式
Posted 啊肖不想上班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础之lambda表达式相关的知识,希望对你有一定的参考价值。
目录
1、lambda函数介绍
有时在使用函数时不需要给函数分配一个名称,该函数就是“匿名函数”。在python中使用lambda表达式表示匿名函数
语法:lambda 参数列表:lambda体
lambda是关键字声明,在lambda表达式中,参数列表与函数中的参数列表一样,但不需要用小括号括起来,冒号后面是lambda体,lambda表达式的主要代码在lambda体处编写,类似于函数体。
提示:lambda体不能是一个代码块,不能包含多条语句,只能包含一条语句,该语句会计算一个结果返回给lambda表达式,但与函数不同的是,不需要使用return语句返回,而且当使用函数作为参数的时候。lambda表达式非常有用,可以让代码简洁,简单。
2、lambda函数与def函数的区别
1.lambda可以立即传递(无需变量),自行返回结果
2.lambda在内部只能包含一行代码
3.lambda是一个为编写简单函数而设计的,而def用来处理更大的任务
4.lambda可以定义一个匿名函数,而def定义的函数必须有一个名字
lambda函数的优势:
1.对于单行函数,使用lambda表达式可以省去定义函数的过程,让代码更加简洁
2.对于不需要多次复用的函数,用lambda表达式可以在用完后立即释放,提高程序执行的性能。
3、lambda案例
# def函数写法
def add(a, b):
return a + b
print(add(10, 20))
print("-" * 50)
# lambda函数写法
add_lambda = lambda a, b: a + b
print(add_lambda(10, 20))
# 使用if判断奇偶性
def get_odd_even(x):
if x % 2 == 0:
return "偶数"
else:
return "奇数"
print(get_odd_even(10))
# lambda函数写法
get_odd_even1 = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(get_odd_even1(10))
列表排序
a = [(2, "小黑"), (5, "小白"), (4, "张三"), (3, "王五")]
a.sort(key=lambda x: x[0])
print(a)
4、map方法混搭
遍历序列,对序列中每个元素进行操作,最终获得新的序列
from functools import reduce
def add(num):
return num ** 2
x = map(add, [1, 2, 3, 4, 5])
print(x)
print(list(x))
print("_" * 50)
y = map(lambda num: num ** 2, [1, 2, 3, 4, 5]) # map()对序列中的每个元素进行操作,获得新的序列
print(list(y))
x = filter(lambda num: num % 2 == 0, [1, 2, 3, 4, 5]) # filter()对序列中的每个元素筛选,获得新的序列
print(list(x))
list1 = [1, 2, 3, 4, 5]
list2 = reduce(lambda x, y: x + y, list1) # reduce()对序列中元素进行累加
print(list2)
python基础
lambda表达式:
lambda表达式又称匿名函数,一般形式为:
Lamdba 参数(,参数2…): 执行语句
他等同于
def fuc(参数):
执行语句
return 执行结果
lambda与普通函数最大的区别就是:lambda的主题是一个单个的表达式,而不是代码块,这就是为什么lambda不能写多行的原因。
为什么要使用lambda呢?
因为他起到一个速写的作用,同时其匿名的特性代表你无须为其分配名称,较为简洁。
------------------------------------------------分割线-----------------------------------------------------
python的内置函数
一下图片总结了内置函数的内容:
下面一条条来讲。
abs() #求绝对值函数,返回入参的绝对值,
#abs(-1) = 1
all()与any()
all与any是逻辑操作,all是求交集,any求并集。即all的入参全为真是返回1,any的入参有为真是返回真
#All(1,0) = 0 any(0,1) = 1
ascii()
返回对象的__repr__方法,不知道有何用。
bin(),bool(),float(),int(),oct(),hex(),str()
以上函数分两类:
第一类为数学类型转换函数,bin(),oct(),hex()分别对应十进制转换为二进制,八进制,16进制
第二类为变量类型转换函数,bool(),float(),int(),str()分别对应的是转换为布尔型,浮点型,整形,字符串类型。
callable(fuc)
检查传入参数是否可调用并返回检查结果
chr(i),ord()
chr返回整数i对应的ascii字符,而ord则将ascii字符转换回i,基本没用。
classmethod(),staticmethod()
这两项分别对应类方法和静态方法,还没学到暂时留空。
compile()
将传入字符串编译为python可执行的语句,并返回。
complex(real,imag)
这是一个创建复数的方法,这个复数由real和imag组成。
delattr(obj,name),getattr(obj,name),hasattr(obj,name),setattr(obj,name)
这四个函数都是操作对象属性的方法。
delattr可以删除obj对象的name属性,getattr可以获取obj对象的name属性并返回,hasattr是判断obj对象是否有name属性,并返回判断结果,setattr是设置obj对象的那么属性的值。
dict(),list(),set(),frozenset(),tuple(),bytearray()
以上六个函数皆为创建或转换数据类型的函数。
dict()为创建或转换为字典的函数,list()是创建或转换为列表的函数,set()是创建或转换为集合的函数,frozenset()则是创建不可变的集合,tuple()为创建或转换为元组的函数,bytearray()比较特殊,他是转换字符串为字节数组的函数。
dir()
dir函数可以返回对象里的所有方法,以列表方式返回。
divmod(a,b)
divmod是以元组的方式返回a/b的结果
#divmod(10,3) = (3,1)
enumrate()
enumrate用来遍历传入序列的“索引-值”。
eval(),exec()
eval可以将传入字符串转换为表达式执行,exec()同理但有区别,因为exec其实并非函数,所以传入exec的字符串可以只是一个表达式的一部分,而eval必须是完整的表达式才行。
filter(fuc,a),map(fuc,a)
这两个函数编程工具,第一个参数为处理方式(接受函数),a则为待处理对象
filter能按照fuc要求返回a的filter结果
map则按fuct要求,处理a的每个元素
zip(a,b)
zip会讲a序列与b序列进行组合后返回。
#a = [1,2,3]
#b = [2,4,6]
print(zip(a,b)) =[(1,2),(2,4),(3,6)]
globals(),locals()
这俩个函数均为打印模块变量,locals打印模块的所有局部变量,globals则是打印函数的所有全局变量。
hash()
求传入值的哈希值。
help()
获取传入函数的帮助命令。
id()
获取传入值的内存地址。
input()
接受键盘输入并将其返回。
isinstance(),issubclass()
这俩函数是判断函数,一个是判断是否为实例,一个是判断是否为子类。
iter()
iter函数用于将转入值转换为可迭代的,即支持next()方法寻找下一值。
len()
获取传入值的字符长度。
max(),min(),sum()
这三个都是运算函数,max返回传入序列的最大值,min返回最小值,sum返回和。
memoryview()
本函数是返回对象的内存查看对象,应用很少。
next()
返回可迭代对象的下一个元素,同时将指针移向下一个元素。
object()
object并不是函数,而是一个基类,创建任何类时,最好都要从object继承。
open()
open函数在下面会细说。
pow(a,b)
pow函数其实就是返回a**b的运算结果,没用。
property()
目前老师还没讲,暂时留空。
range()
创建一个范围的range序列,可转换为各种数据类型比如列表元组等,比如list(range(1,5)) = [1,2,3,4,5]
repr()
repr函数与str函数类似,但是repr函数会转换成字符串的原始形态,而str会调整成更好读的形态。
reversed()
返回传入序列的颠倒值。reversed([1,2,3]) = [3,2,1]
round()
求传入数的四舍五入值。
slice(start,stop)
对对象进行切片操作,可以不指定stop。start与stop为字符位置。
sorted()
对传入序列进行排序操作。
type()
获取传入对象的数据类型。
super()
获取传入对象的超类。
vars()
vars函数为locals函数的升级版,当不传入参数是,vars和locals函数的作用是一样的。当指定类后,可以只返回指定类的属性。
------------------------------------------------分割线--------------------------------------------------
python文件操作
上一节没说的open函数其实就是python操作文件的函数。
python支持如下文件操作方式:
一.基本操作模式
1.r模式 2.w模式 3.a模式 4.x模式
r模式是指读模式,当程序以r模式打开时,文件可读不可写,文件不存在则报错。
w模式是指写模式,当程序以w模式打开时,文件可写不可读,写入方式为覆盖,即文件指针在最前,并清空文件,若文件不存在则创建。
a模式是指追加模式,当程序以w模式打开时,文件可写不可读,写入方式为追加,即文件指针在末尾,若文件不存在则创建。
x模式不常用。
二.二进制操作模式
1.rb模式 2.wb模式 3.ab模式 4.xb模式
以上模式皆为二进制读取模式,即操作方法一致,但读取的内容按不进行字符转换,保留原始形态。
三.扩展操作模式
1.r+模式 2.w+模式 3.a+模式 4.x+模式
1.r+与r模式的区别在于,可以写。
2.w+与w模式的区别在于,可以读。
3.a+模式与a的区别在于,可以读。
三.文件指针
python文件操作完全依赖指针,但这也很不好用,操作指针的函数是seek()函数,例如:
SAM文件包含:1234567890
1 with open(\'SAM\', \'r\') as f: 2 3 print(f.readline()) 4 5 f.seek(5) 6 7 print(f.readline())
则输出如下结果:
1234567890 67890
seek函数向前移动了文件指针,移动位置为5。
当已w模式打开时,如移动n个指针,则修改文件会清空n个字符后的所有字符,再写入文件。
以上是关于Python基础之lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章