一、函数多返回值
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 参数: 一行函数体; -
特点:无名称、一次性、自动返回结果;
-
场景:简单逻辑+函数作为参数的组合使用。