python基础学习笔记第六章——函数进阶

一、函数多返回值

1. 单return特性

return 会直接退出函数,其下方代码不会执行,多个return仅第一个生效。

python 复制代码
def return_num():
    return 1  # 仅执行此return
    return 2
result = return_num()
print(result)  # 输出:1

2. 多返回值实现

函数中写一个return,用逗号分隔多个返回值;调用时用对应数量变量接收,支持不同数据类型。

python 复制代码
def test_return():
    return 1, "hello", True  # 多返回值,本质返回元组

x, y, z = test_return()  # 按顺序接收
print(x)  # 输出:1
print(y)  # 输出:hello
print(z)  # 输出:True

二、函数4种传参方式

1. 位置参数

  • 规则 :调用时按函数定义的参数顺序、个数传递参数,一一对应。

  • 特点:最基础传参方式,顺序不可乱、个数不可错。

python 复制代码
# 定义函数:3个位置参数name/age/gender
def user_info(name, age, gender):
    print(f'您的名字是{name},年龄是{age},性别是{gender}')

# 调用:按位置传参,顺序必须一致
user_info('TOM', 20, '男')  # 输出:您的名字是TOM,年龄是20,性别是男

2. 关键字参数

  • 规则 :调用时以键=值形式传参,清除参数顺序要求

  • 注意 :位置参数需在关键字参数前面,关键字参数之间无顺序。

python 复制代码
def user_info(name, age, gender):
    print(f'您的名字是{name},年龄是{age},性别是{gender}')

# 纯关键字传参,顺序任意
user_info(age=20, gender='男', name='小明')  # 输出:您的名字是小明,年龄是20,性别是男
# 位置+关键字混合传参,位置参数在前
user_info('小明', age=20, gender='男')  # 输出:您的名字是小明,年龄是20,性别是男

3. 缺省参数(默认参数)

  • 规则 :定义函数时为参数设置默认值,调用时可省略该参数(使用默认值);若传值则覆盖默认值。

  • 注意位置参数必须在缺省参数前面(定义和调用均遵循)。

复制代码
python 复制代码
# 定义:gender设为默认参数,默认值'男'
def user_info(name, age, gender='男'):
    print(f'您的名字是{name},年龄是{age},性别是{gender}')

# 调用:省略gender,使用默认值
user_info('TOM', 20)  # 输出:您的名字是TOM,年龄是20,性别是男
# 调用:为gender传值,覆盖默认值
user_info('Rose', 18, '女')  # 输出:您的名字是Rose,年龄是18,性别是女

4. 不定长参数(可变参数)

用于不确定调用时传递多少个参数 的场景,分位置不定长关键字不定长两种。

(1)位置不定长 *args

  • 规则 :定义函数时参数前加*,调用时传入的所有位置参数 会被收集为元组 ,参数名一般约定为args
python 复制代码
# 定义:*args收集位置参数为元组
def user_info(*args):
    print(args)  # 输出接收到的元组
    print(type(args))  # 输出:<class 'tuple'>

# 调用:传入任意个数位置参数
user_info('TOM')  # 输出:('TOM',)
user_info('TOM', 18, '男')  # 输出:('TOM', 18, '男')
user_info()  # 输出:()(不传参也可)

(2)关键字不定长 **kwargs

  • 规则 :定义函数时参数前加**,调用时传入的所有键=值参数 会被收集为字典 ,参数名一般约定为kwargs
python 复制代码
# 定义:**kwargs收集关键字参数为字典
def user_info(**kwargs):
    print(kwargs)  # 输出接收到的字典
    print(type(kwargs))  # 输出:<class 'dict'>

# 调用:传入任意个数键=值参数
user_info(name='TOM', age=18)  # 输出:{'name': 'TOM', 'age': 18}
user_info(name='Rose', gender='女', id=110)  # 输出:{'name': 'Rose', 'gender': '女', 'id': 110}
user_info()  # 输出:{}(不传参也可)

传参方式综合练习

需求:定义函数,接收姓名、年龄,不定长接收爱好(元组),不定长接收其他信息(字典),并格式化输出。

python 复制代码
def user_msg(name, age, *hobbies, **other_info):
    # 拼接爱好为字符串
    hobby_str = ','.join(hobbies) if hobbies else '无'
    # 拼接其他信息为字符串
    other_str = '、'.join([f'{k}:{v}' for k, v in other_info.items()]) if other_info else '无'
    # 格式化输出
    print(f'我是{name},年龄{age}岁,我的爱好有:{hobby_str}。')
    print(f'我的其它信息:{other_str}。')

# 调用函数
user_msg('小明', 20, '篮球', '听歌', '看电影', 身高=180, 体重=65, 城市='北京')

输出结果

python 复制代码
我是小明,年龄20岁,我的爱好有:篮球,听歌,看电影。
我的其它信息:身高:180、体重:65、城市:北京。

三、函数作为参数传递

1. 核心特性

函数本身可以作为参数 传入另一个函数,传递的是计算逻辑,而非具体数据。

2. 代码示例

python 复制代码
# 定义接收函数作为参数的主函数
def test_func(compute):
    # 调用传入的函数,传入具体数据
    result = compute(1, 2)
    print(f'计算结果:{result}')

# 定义不同计算逻辑的函数
def add(x, y):
    return x + y  # 加法逻辑
def mul(x, y):
    return x * y  # 乘法逻辑

# 传入加法函数,执行加法计算
test_func(add)  # 输出:计算结果:3
# 传入乘法函数,执行乘法计算
test_func(mul)  # 输出:计算结果:2

四、lambda匿名函数

1. 定义

lambda关键字定义无名称的临时函数,仅可使用一次,适用于简单逻辑场景。

2. 语法

python 复制代码
lambda 传入参数: 函数体  # 函数体仅能写一行代码,不可多行
  • lambda:定义匿名函数的关键字;

  • 传入参数:可写多个,用逗号分隔(无参数则留空);

  • 函数体:唯一一行代码,会自动将执行结果作为返回值(无需写return)。

3. 基础使用

python 复制代码
# 定义匿名函数:求两个数的和,直接调用
sum_func = lambda x, y: x + y
print(sum_func(3, 5))  # 输出:8

# 无参数匿名函数
hello_func = lambda: 'hello world'
print(hello_func())  # 输出:hello world

# 多参数匿名函数
calc_func = lambda a, b, c: a + b * c
print(calc_func(1, 2, 3))  # 输出:7

4. 结合"函数作为参数"使用(核心场景)

替代自定义小函数,简化代码,一次性使用计算逻辑。

python 复制代码
# 主函数:接收计算函数作为参数
def test_func(compute):
    result = compute(1, 2)
    print(f'计算结果:{result}')

# 传入lambda匿名函数(加法),无需定义带名函数
test_func(lambda x, y: x + y)  # 输出:计算结果:3
# 传入lambda匿名函数(减法)
test_func(lambda x, y: x - y)  # 输出:计算结果:-1
# 传入lambda匿名函数(乘法)
test_func(lambda x, y: x * y)  # 输出:计算结果:2

5. 注意事项

  • 匿名函数仅适用于简单逻辑(函数体一行代码可完成);

  • 复杂逻辑(多行代码)需用def定义带名函数

  • 匿名函数无名称,无法重复调用,仅可临时使用。

五、核心知识点总结

1. 多返回值

一个return分隔多个值,调用时按顺序用变量接收,本质返回元组。

2. 四种传参

传参方式 核心规则 参数形式
位置参数 按顺序、个数传参 func(a, b, c)
关键字参数 键=值传参,顺序任意 func(a=1, b=2)
缺省参数 定义时设默认值,调用可省略 func(a, b=2)
不定长参数 收集任意个数参数 位置:*args(元组);关键字:**kwargs(字典)

3. 函数作为参数

传递计算逻辑,让主函数更灵活,可适配不同业务逻辑。

4. lambda匿名函数

  • 语法:lambda 参数: 一行函数体

  • 特点:无名称、一次性、自动返回结果;

  • 场景:简单逻辑+函数作为参数的组合使用。

相关推荐
码码哈哈0.02 小时前
LangChain 快速入门(从0到可用)
开发语言·python·langchain
2301_776508722 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
熊文豪2 小时前
Java 入门指南
开发语言·python
带娃的IT创业者2 小时前
WeClaw 日志分析实战:如何从海量日志中快速定位根因?
运维·python·websocket·jenkins·fastapi·架构设计·实时通信
2501_918126912 小时前
学习所有6502写游戏动画的语句
汇编·嵌入式硬件·学习·程序人生·游戏
左左右右左右摇晃2 小时前
JVM 笔记--分代工程以及分代的算法
jvm·笔记
-Springer-3 小时前
STM32 学习 —— 个人学习笔记9-3(FlyMcu 串口下载)
笔记·stm32·学习
wh_xia_jun3 小时前
MODNet 本地抠图项目指南
python
weixin_458872613 小时前
东华复试OJ每日3题打卡·复盘103~105
学习