• 4. Python 函数进阶(多返回值、多种传参方式、匿名函数)


    1. 函数的多返回值

    如果一个函数要有多个返回值,该如何书写代码?

    def test_return():
        return 123, "hello", True
    x, y, z = test_return()
    print(x)
    print(y)
    print(z)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出结果:

    123
    hello
    True
    
    • 1
    • 2
    • 3

    按照返回值,写对应的多个变量接收即可。
    支持同时返回不同类型的数据。

    2. 函数的多种传参方式

    2.1 位置参数

    位置参数:调用函数时根据参数位置来传递参数。
    注意:实参与形参的顺序及个数必须一致。

    def user_info(name, age, gender):
    	print(f'您的名字是{name},年龄是{age},性别是{gender}')
    user_info('TOM', 20,'男')
    
    • 1
    • 2
    • 3

    2.2 关键字参数

    关键字参数:函数调用时通过 “键=值” 的形式传递参数。
    作用:可以让函数更加清晰、容易使用,同时也没有参数的顺序需求。

    def user_info(name, age, gender):
        print(f"您的名字是:{name},年龄是:{age},性别是:{gender}")
    #关键字传参
    user_info(name="小明",age=20,gender="男")
    #可以不按照固定顺序
    user_info(age=20,gender="男",name="小明")
    #可以和位置参数混用,位置参数必须在前,且匹配参数顺序
    user_info("小明",age=20,gender="男")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,且要与形参对应,但关键字参数之间不存在先后顺序。

    2.3 不定长参数

    不定长参数:不定长参数也叫可变参数,用于不确定传参个数(不传参也可以)的场景。不定长参数的类型有:

    ① 位置传递
    传进的所有参数都会被 args 变量收集,args 会根据顺序将传进的参数合并为一个元组(tuple)。

    def user_info(*args):
        print(args)
    user_info('TOM')
    user_info('TOM', 18)
    
    • 1
    • 2
    • 3
    • 4

    输出结果:

    ('TOM',)
    ('TOM', 18)
    
    • 1
    • 2

    ② 关键字传递
    参数是 “键=值” 的形式,所有的 “键=值” 都会被 kwargs 接受,组成字典。(kw:key-word)

    def user_info(**kwargs):
        print(kwargs)
    user_info(name='TOM', age=18, id=110)
    
    • 1
    • 2
    • 3

    输出结果:

    {'name': 'TOM', 'age': 18, 'id': 110}
    
    • 1

    2.4 默认参数(缺省参数)

    默认参数:默认参数也叫缺省参数。如果传入该参数,就使用传入的参数;如果不传入,就使用默认值。
    注意:默认参数必须在最后。

    def user_info(name, age, gender='男'):
        print(f'您的名字是{name},年龄是{age},性别是{gender}')
    user_info('TOM', 20)
    user_info('Rose', 18, '女')
    
    • 1
    • 2
    • 3
    • 4

    输出结果:

    您的名字是TOM,年龄是20,性别是男
    您的名字是Rose,年龄是18,性别是女
    
    • 1
    • 2

    错误示例:
    在这里插入图片描述

    3. 匿名函数

    3.1 函数作为参数传递

    在前面,函数都是接收数据作为参数传入,如:数字、字符串、字典、列表、元组等。
    其实,函数本身,也可以作为参数传入另一个函数内。

    def test_func(compute):
        result = compute(1, 2)
        print(type(compute))
        print(result)
    
    def compute(x,y):
        return x + y
    
    test_func(compute)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    输出结果:

    <class 'function'>
    3
    
    • 1
    • 2

    这是计算逻辑的传递,而非数据的传递。

    3.2 lambda 匿名函数

    函数的定义中,def 关键字,可以定义带有名称的函数;lambda 关键字,可以定义匿名函数。

    有名称的函数,可以基于名称重复使用;无名称的匿名函数,只可临时使用一次。

    匿名函数定义语法

    lambda 传入参数:函数体
    
    • 1

    lambda:关键字,表示定义匿名函数。
    传入参数:匿名函数的形参,如:x, y表示接收 2 个形参。
    函数体:函数的执行逻辑,只能写一行代码。如果代码超过一行,还是要用 def 定义带名函数。

    传入 def 定义的函数与传入匿名函数的对比:

    (1) 通过 def 关键字,定义一个函数,并传入:

    def test_func(compute):
        result = compute(1, 2)
        print(result)
        
    def compute(x,y):
        return x + y
    
    test_func(compute)#结果:3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (2) 通过 lambda 关键字,传入 lambda 匿名函数:

    def test_func(compute):
        result = compute(1, 2)
        print(result)
    #lambda函数直接将x+y的结果return 
    test_func(lambda x, y: x + y)#结果:3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 def 和 lambda,定义的函数功能完全一致,只是 lambda 关键字定义的函数是匿名的,无法二次使用。

    若用一个变量接收了 lambda 函数,就可以多次使用该函数。

    func = lambda x, y: x + y #func相当于函数名
    print(func(1,3))#输出4
    print(func(1,3))#输出4
    print(func(1,3))#输出4
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    JDBC学习笔记
    PCA9535模块移植
    数据库范式
    游戏后端服务器架构中的Redis应用:缓存游戏角色、排行榜:玩家分数、计分器:玩家击杀怪物的次数
    springBoot-使用idea创建项目添加依赖并实现数据查询
    书生浦语大模型实战营---Linux 基础知识
    Jenkins CI/CD 流程
    入门电机系列之6PID 算法的原理与应用
    Linux 目录管理
    小程序授权头像昵称改为头像昵称填写能力详解
  • 原文地址:https://blog.csdn.net/qq_44378854/article/details/126490790