一、函数多个返回值
def test_return():
x = 1
y = "hello"
z = True
return x, y, z
a, b, c = test_return()
print(a)
print(b)
print(c)
二、函数多种传参方式
2.1 函数参数种类
根据使用方式上的不同,函数有4种常见参数的使用方式:
- 位置参数
- 关键字参数
- 缺省参数
- 不定长参数
2.2 位置参数
- 位置参数:调用函数时,根据函数定义的参数位置来传递传输
- 传递的参数和定义的参数的顺序及个数必须一致
示例:
def user_info(name, age, gender):
print(f"名字:{name},年龄:{age},性别:{gender}")
user_info("Tom", 20, "男")
2.3 关键字参数
- 关键字参数:函数调用时通过
键 = 值
形式传递采纳数 - 作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
def user_info(name, age, gender):
print(f"名字:{name},年龄:{age},性别:{gender}")
# 关键字传参
# 可以不按照固定顺序
user_info(age = 20, name = "小明", gender = "男")
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("小明", gender = "男", age = 20)
2.4 缺省参数
- 缺省参数:缺省参数(也称为默认参数)是函数定义中为参数指定的默认值。当调用函数时,如果没有为具有默认值的参数提供实际的参数值,那么将自动使用这个默认值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
- 作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值
def user_info(name, age, gender = "男"):
print(f"名字:{name},年龄:{age},性别:{gender}")
user_info("小天", 20) # 名字:小天,年龄:20,性别:男
2.5 不定长参数
- 不定长参数:不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
- 作用:当调用函数时不确定参数个数时,可以使用不定长参数
2.5.1 不定长参数—位置传递
- 用途:
*args
用于收集额外的位置参数(那些没有被命名的参数),这些参数被封装成一个元组。 - 定义方式:在参数名前加一个星号 * 来定义,如
*args
。
示例:
def user_info(*args):
print(args)
user_info(1, 2, 3, "小明") # (1, 2, 3, '小明')
2.5.2 不定长参数—关键字传递
- 用途:
**kwargs
用于收集那些关键字参数,这些参数没有在函数定义中直接命名。这些参数被封装成一个字典。 - 定义方式:在参数名前加两个星号 ** 来定义,如
**kwargs
。
def user_info(**kwargs):
print(kwargs)
user_info(name = "小王", age = 11, gender = "男") #{'name': '小王', 'age': 11, 'gender': '男'}
三、匿名函数
3.1 函数作为参数传递
场景描述:
假设我们正在编写一个购物应用,需要根据不同的促销策略来计算商品的最终价格。我们可以定义几种不同的促销计算函数,然后将这些函数作为参数传递给另一个函数,这个函数负责应用这些促销策略来显示最终价格。
def no_discount(price):
"""不打折,返回原价"""
return price
def ten_percent_discount(price):
"""打九折"""
return price * 0.9
def twenty_percent_discount(price):
"""打八折"""
return price * 0.8
# 主函数
def apply_discount(price, discount_function):
"""应用折扣策略计算最终价格"""
final_price = discount_function(price)
print(f"经过促销策略处理后的价格为:¥{final_price:.2f}")
# 商品原价
original_price = 100
# 不使用折扣
apply_discount(original_price, no_discount)
# 使用10%折扣
apply_discount(original_price, ten_percent_discount)
# 使用20%折扣
apply_discount(original_price, twenty_percent_discount)
- 通过将函数作为参数传递,我们的 apply_discount 函数变得非常灵活和可重用,它可以与任何符合标准的促销策略函数配合使用。这种设计使得你可以很容易地增加新的促销策略,而无需修改 apply_discount 函数的代码。此外,这种方法也便于测试和维护,因为每个促销策略都是独立的,可以单独测试和修改。
3.2 lambda匿名函数
- lambda 函数是一种简洁的定义匿名函数的方式。lambda 函数本质上就是一个没有名字的小函数,它们经常用于需要一个函数的场合,但该函数又足够简单以至于不值得单独定义。
语法:lambda 传入参数: 函数体(一行代码)
classify = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(classify(3)) # 输出: 奇数
print(classify(2)) # 输出: 偶数