0
点赞
收藏
分享

微信扫一扫

python进阶-----十三课(下)--函数进阶

求索大伟 2022-03-30 阅读 48

python进阶,在第一期的基础上做了极大的优化,整体更加美观易懂

十三、函数进阶 ()

内容较多(该篇幅超过4000字),分为上下两个篇幅,此篇是下

13.6、参数形式

参数形式: 语法:lambda 参数列表:表达式(返回值)

13.6.1、无参数

d = lambda: 99   # 定义一个函数b,返回值为99
print(d())  # 结果:99

13.6.2、一个参数

d1 = lambda a: a  #  定义一个函数d1,并有一个传参
print(d1(999))  # 结果:999

13.6.3、默认参数

func = lambda a, b, c = 250: a + b + c  # c给了一个值,为250
print(func(10, 1))  # 不给c传值,c用默认值,默认为250
print(func(10, 1, 3))  # 给c传值,传的值会覆盖c原有的值
# 结果:
>>> 216
>>> 14

13.6.4、可变参数

可变参数:*args (包裹位置参数,返回的数据类型为元组),**kwargs (包裹关键字参数,关键字参数(以键等于值的形式去传))

func1 = lambda *args: args  # 传入的值没有上限返回值args表示返回所有
print(func1(10, 20, 21))
print(func1(10, 11, 412, 13))
# 结果:
>>> (10, 20, 21)
>>> (10, 11, 412, 13)
func2 = lambda **kwargs: kwargs  # 包裹关键字参数(以键等于值的形式去传)
print(func2(name="zs"))  # 键等于值的形式去传参
print(func2(name="ls", age=60))
# 结果:
>>> {'name': 'zs'}
>>> {'name': 'ls', 'age': 60}

13.7、lambda表达式的应用

13.7.1、带判断的lambda

func3 = lambda a, b:a if a > b else b  # lambda 接if判断
print(func3(5, 6))
# 结果:6

13.7.2、列表数据按字典key的值升序排序

13.7.2.1、name对应的值进行升序排序
stu = [
    {"name": "wjk", "age": 21},
    {"name": "wy", "age": 22},
    {"name": "yyqx", "age": 19}
]
stu.sort(key=lambda a: a["name"])  # a指代字典,默认升序(后面的没写,具体看13.7.2.2)。name的值升序排序
print(stu)
# 结果:
>>> [{'name': 'wjk', 'age': 21}, {'name': 'wy', 'age': 22}, {'name': 'yyqx', 'age': 19}]
13.7.2.2、age对应的值进行降序
# .sort(key = None, reverse= False(升序)、True(降序))
# key = None:可以指定序列中的一个元素来进行排序
stu = [ 
    {"name": "wjk", "age": 21},
    {"name": "wy", "age": 22},
    {"name": "yyqx", "age": 19}
]
stu.sort(key=lambda v: v["name"], reverse=True)  # v默认为字典(用任意字母都可以),reverse=Tru指降序
print(stu)
# 结果:
>>> [{'name': 'yyqx', 'age': 19}, {'name': 'wy', 'age': 22}, {'name': 'wjk', 'age': 21}]

13.8、高阶函数

abs()函数:可以完成对数字求绝对值计算

print(abs(-10))
print(abs(-20))
print(abs(10))
# 结果:
>>> 10
>>> 20
>>> 10
print(round(1.4))
print(round(1.6))
# 结果:
>>> 1
>>> 2

小需求:输入两个数字,先进行数字处理(四舍五入+绝对值)再进行求和计算

方法一

def add_num(a, b):  # 定义形参a, b
    return abs(a) + abs(b)  # abs()求绝对值,对传的参数做绝对值运算并相加,返回结果

print(add_num(-9.994, -89.235))
# 结果:99.229
def add_num01(a, b):
    return round(a)+round(b)
print(add_num01(-90.996, 996.404))
# 结果:905

问题很大,于是出现了方法二

方法二->高阶函数-把函数作为参数传入

def add1(a, b, e):
    return e(a) + e(b)  # 
print(add1(3.6, -4.4, abs))  # 结果:8.0
print(add1(3.9, 5.4, round))  # 结果:9

def add2(a, b, e, f):             
    return f(e(a)) + f(e(b))      
print(add2(-3.9, 4.2, abs, round))
# 结果:8                            

13.9、内置高阶函数

list1 = [0, 1, 4, 8, 9]
def func1(x):
    return x ** 2  # 计算变量x的二次方
result = map(func1, list1)  # 对list中的元素做二次方操作
print(list(result))  # 要类型转换,否则出现乱码
# 结果:[0, 1, 16, 64, 81]
import functools
list2 = [1, 9, 6, 4, 0]

def func2(a, b):  # fun2的作用,求两数和
    return a + b

result = functools.reduce(func2, list2)  # linst2中的元素相加
print(result)
# 结果:20
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 需求,过滤偶数
def fun3(x):  # fun3 取奇数
    return x % 2 != 0
result = filter(fun3, list3)  # 结果为0的过滤
print(list(result))
# 结果:[1, 3, 5, 7, 9]
举报

相关推荐

0 条评论