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编辑  收藏  举报

导航