Lambda匿名函数
匿名函数就是没有定义函数名称,可以实现函数某些简单功能
匿名函数格式:
lambda param_list:expression
#param_list,参数列表
#expression,建议书写一些简单的表达式,没法完整实现复杂代码块内容
f=lambda x,y:x+y
data=f(2,6)
print(data)
以上代码实现了一个x+y的值,先把匿名函数赋值给一个变量f,调用f传入两个参数,赋值给data,然后打印data。lambda匿名函数也可以和三元表达式一起使用。
f =lambda x,y: x+yif x>yelse x-y
data = f(8,7)
print(data)
上述代码的意思是匿名函数传入两个参数,如果x>y返回x+y,否则返回x-y。
三元表达式
在Java中三元表达式的表示是:x>=y?x+y:x-y,如果x>=y为true,则返回?后面的值,否则返回:后面的值
但是在python中不是这样的,格式:
条件为真的结果 if 条件判断 else 条件为假的结果
f = lambda x: x if x.islower() else x.upper()
data=f("hello")
print(data)
上述代码的意思是传入一个单词x,如果全部都是小写则返回小写,否则返回大写
高阶函数
map(func,*iterables)
#func,表示可接收一个函数
#*iterables,表示可接收一个可迭代的序列
a = [1,2,3,4,5]
b =map(lambda x:x**3,a)
print(list(b))
上述代码有一个列表a,使用map里面传入一个匿名函数和可迭代序列a,赋值给b变量,这个时候b是一个对象不能直接打印,需要转成列表
a = [1,2]
b = [1,2,3,4]
c =map(lambda a,b:a+b,a,b)
print(list(c))
上述代码是返回两个列表相加的结果集,但是两个列表长度不同,结果会怎么样呢?结果是[2,4],在map中,如果两个列表长度不一,则会返回长度较短的结果集。
reduce(function,sequence[,initial]) #这个函数需要手动导入 from functools import reduce
#function,接收一个函数
#sequence,接收一个可迭代序列
#initial,初始运算的值
from functoolsimport reduce
a=[1,2,3,4,5]
num = reduce(lambda x,y:x*y,a,100)#这里给第三个参数初始值为100,运算方式是100*1*2*3*4*5
print(num)
上述代码是计算列表a各个元素的乘积,再来说说第三个参数initial,初始运算的值
,这个参数是会最先运算。reduce适用于连续计算。
filter(function,iterable)#用于元素过滤
#function 接收一个函数
#iterable接收一个可迭代序列
a=[0,1,2,3,4,5,6]
b =filter(lambda x:True if x!=0 else False,a)#bool(1)为True,bool(2)为False,可以简化成lambda x:x,a,当为0的时候为False,不为0的时候为True
print(list(b))
上述代码是将a列表中不为0的数添加到b集合,filter返回结果必须是True或False
列表推导式
基本格式:
variable=[i for i in input_list if 条件判断]
#variable,列表名,可自定义
# i 循环变量名
# input_list,可迭代序列
# if 条件判断,如果不写,默认所有条件都成立
d={'apple':1,'banana':2,'pear':3}
b = [ifor iin d.keys()]
print(b)
上述代码是将字典中的键保存到一个列表中
d={'apple':1,'banana':2,'pear':3}
b = { value:keyfor key,valuein d.items()}
print(b)
上述代码是将字典中的键值替换位置
网友评论