Python-10-Python常见高级用法
10-1 Lambda 匿名函数
匿名函数:没有定义函数的名称,可以实现函数某些简单的功能。格式:
lambda param_list:expression # param_list 参数列表 # expression 简单表达式,没法实现复杂的代码块内容
需求1:传入x y,返回x+y
例子:
f = lambda x,y: x+y f(3, 4) #7
lambda 与向量表达式和高阶表达式一起使用,也是可以实现复杂的函数体的。
#需求2:若x>y返回x+y的值,否则返回x-y的值 f = lambda x,y: x+y if x>=y else x-y #三元表达式(判断写在后面,结果写在前面) f(5, 4) #9 f(4, 5) #-1
10-2 三元表达式
也即3目运算符,python中的三目运算符格式是:
<条件为真的结果> if <条件判断> else <条件为假的结果>
#需求1: 输入一个单词,如果是小写单词则返回小写单词,否则都返回大写单词。 f = lambda x: x if x.islower() else x.upper() f('hello') #'hello' f('Hello') #'HELLO'
10-3 map
高阶函数map:
map(func, *iterables) # func 代表可接收一个函数 # iterables 代表可接收一个或多个可迭代的序列
需求1:生成一个列表b,列表b内的元素为a列表每个元素的三次方
#非高阶函数实现 a = [1, 2, 3] b = [] for i in a: b.append(i**3) b #[1, 8, 27] #高阶函数实现 def func(x): return x ** 3 b = map(func, a) b #<map at 0x22216a07340> list(b) #[1, 8, 27] #和lambda表达式一起使用 b = map(lambda x: x**3, a) list(b) #[1, 8, 27]
需求2:将两个列表元素相加之后的结果存放在一个新列表c中
a = [1, 2, 3, 4, 5] b = [1, 2, 3, 4, 5] c = map(lambda x,y: x+y, a,b) list(c) #[2, 4, 6, 8, 10] a = [1, 2, 3, 4] b = [1, 2] c = map(lambda x,y: x+y, a,b) list(c) #[2, 4] 若列表元素个数不同,则返回列表元素个数较少的作为结果
10-4 reduce
高阶函数reduce,适用场景:连续计算
from functools import reduce reduce(function, sequence[, initial]) #function 接收一个函数 #sequence 接收一个可迭代序列 #initial 初始运算的值
例子:
from functools import reduce a = [1, 2, 3, 4, 5] num = reduce(lambda x,y:x*y, a) #这里需要两个参数x,y,y在列表中依次向后取,x*y作为下一次的x参与运算 num #120 num = reduce(lambda x,y:x*y, a, 1000) # 1000*1*2... 1000是个初始值 num #120000 from functools import reduce b = ['a', 'b', 'e'] r = reduce(lambda x,y:x+y, b, '???') r #'???abe'
10-5 filter
适用场景:用于序列元素过滤。要求function返回结果必须得是True或False.
filter(function, iterable) # function 接收一个函数 # iterable 接收一个可迭代序列
例子:
# 过滤a中非0的值-非高阶 a = [0, 1, 2, 3, 4, 5] b = [] for i in a: if a != 0: b.append(i) b #[0, 1, 2, 3, 4, 5] # 过滤a中非0的值-高阶 def f(x): if x !=0: return x b = filter(f, a) list(b) #[1, 2, 3, 4, 5] # 过滤a中非0的值-高阶+lambda c = filter(lambda x: True if x!=0 else False, a) c #<filter at 0x22216a06c50> list(c) #[1, 2, 3, 4, 5] c = filter(lambda x:x, a) #同上,非0就是True list(c) #[1, 2, 3, 4, 5]
10-6 列表推导式
基本格式:
variable = [i for i in input_list if <条件判断>] # variable 列表名,可自定义 # i 循环变量名 # input_list 可迭代序列 # if 条件判断,如果不写的话,默认所有条件都成立
例子:
#需求1:如何快速生成一个0-9的列表 #一般实现 a = [] for i in range(9): a.append(i) a #[0, 1, 2, 3, 4, 5, 6, 7, 8] #列表推导式实现 a = [i for i in range(10)] a #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] a = [i for i in range(10) if i > 5] a #[6, 7, 8, 9] #需求2:生成一个列表,列表内的元素为a列表每个元素的三次方 a= [6, 7, 8, 9] c = [i**2 for i in a] c #[36, 49, 64, 81] #需求3:将字典中的键都保存到一个列表c中 d = {'lemon':10, 'apple':5, 'pear':15} c = [i for i in d.keys()] c #['lemon', 'apple', 'pear'] #需求4:扩展,将字典里面的键与值进行替换 d = {'lemon':10, 'apple':5, 'pear':15} e = {value:key for key,value in d.items()} #注意这里是大括号,value:key表示键值替换 e #{10: 'lemon', 5: 'apple', 15: 'pear'}
posted on 2023-08-01 15:43 Hello-World3 阅读(42) 评论(0) 编辑 收藏 举报