Python 函数基础(包含匿名函数 lambda)
·
引言:
函数可以封装重复逻辑,减少冗余代码,提升复用性。本文系统梳理 Python 函数基础概念、五类参数、解包、匿名函数,全部知识点配套可执行示例。
目录
一、函数基础概念
核心目的
减少代码编写,提升代码复用效果。
术语说明
def:关键字,定义 / 声明函数- 调用函数:函数名 (),触发执行
- 形参(形式参数):定义函数时写在括号内的变量
- 实参(实际参数):调用函数传入真实数据
- 返回值
return:函数运算完成向外输出结果
类比:程序 = 输入 → 运算 → 输出;函数 = 输入 → 运算 → 输出
python
运行
# 1.定义函数 def
def calc_add(a, b):
# a,b 形参
res = a + b
return res # 返回值
# 2.调用函数,3,5是实参
result = calc_add(3, 5)
print(result)
二、函数五大参数类型(思维导图全覆盖)
1. 位置参数
按照顺序依次赋值,实参与形参顺序一一对应
python
运行
def show(name, age):
print(f"姓名:{name},年龄:{age}")
# 位置传参,顺序不能乱
show("瓜瓜", 18)
2. 关键字参数
直接指定形参名称赋值,不受顺序约束
python
运行
def show(name, age):
print(f"姓名:{name},年龄:{age}")
# 关键字传参
show(age=16, name="小明")
3. 默认参数
定义函数时形参设置默认值;带默认的参数必须放在无默认参数后方
python
运行
def show(name, age=18):
print(f"姓名:{name},年龄:{age}")
show("小红") # 不传入age,自动使用默认值18
show("小红", 20) # 传入值,覆盖默认值
4. 不定参数(可变参数)
可变元组参数 *args
接收任意多个位置实参,打包为元组
python
运行
def sum_all(*args):
print(args)
return sum(args)
print(sum_all(1,2,3))
print(sum_all(1,2,3,4,5))
可变字典参数 **kwargs
接收任意多个未定义关键字实参,打包为字典
python
运行
def print_info(**kwargs):
print(kwargs)
print_info(name="瓜瓜", sex="女", height=165)
三、列表、字典解包传参
列表解包 *
把列表拆分,依次作为位置实参
python
运行
def show(a,b,c):
print(a,b,c)
lst = [10,20,30]
show(*lst)
字典解包 **
把字典拆分,作为关键字参数传入
python
运行
def show(name,age):
print(name,age)
info = {"name":"库洛米","age":16}
show(**info)
四、匿名函数 lambda
普通 def 定义具名函数,lambda 创建临时、无名称的匿名函数 语法:lambda 参数: 表达式 限制:只能书写单一表达式,不能写多行代码。
python
运行
# ========== 示例1:无参数匿名函数 ==========
f1 = lambda: "Hello Python"
print(f1())
# ========== 示例2:单个参数 ==========
f2 = lambda x: x ** 2
print(f2(7)) # 49
# ========== 示例3:多个参数 ==========
f3 = lambda a, b: a + b
print(f3(10, 25)) # 35
# ========== 示例4:参数带默认值 ==========
f4 = lambda x, y=10: x * y
print(f4(3)) # 3*10=30
print(f4(3, 5)) # 3*5=15
# ========== 示例5:三元表达式(lambda内条件判断) ==========
# 返回较大值
max_num = lambda a, b: a if a > b else b
print(max_num(56, 29))
# ========== 示例6:map() 批量转换列表 ==========
nums = [1,2,3,4]
res = list(map(lambda x: x*3, nums))
print(res) # [3, 6, 9, 12]
# ========== 示例7:filter() 筛选数据 ==========
nums = [1,2,3,4,5,6,7,8]
# 筛选偶数
res = list(filter(lambda x: x % 2 == 0, nums))
print(res) # [2,4,6,8]
# ========== 示例8:sorted 字典列表排序【重点!面试高频】 ==========
student = [
{"name":"瓜瓜", "age":18},
{"name":"小明", "age":16},
{"name":"小红", "age":20}
]
# 根据age升序
student.sort(key=lambda x: x["age"])
print(student)
# 根据age降序
student.sort(key=lambda x: x["age"], reverse=True)
print(student)
# ========== 示例9:获取元组指定元素排序 ==========
data = [(5, 10), (2, 30), (8, 1)]
# 使用第二个元素排序
data.sort(key=lambda t: t[1])
print(data)
# ========== 示例10:lambda作为函数返回值(闭包简单演示) ==========
def make_adder(n):
return lambda x: x + n
add5 = make_adder(5)
print(add5(10)) # 15
⚠️重要注意事项
- lambda 内部不能使用循环、if 语句块,只能用三元表达式;
python
运行
# 错误写法,不允许
# bad = lambda x: if x>0: print(x)
- 逻辑一旦复杂,不要强行使用 lambda,改用
def定义普通函数,可读性更高; - lambda 没有函数名,报错时堆栈信息不易排查,生产环境慎用超长 lambda。
更多推荐
所有评论(0)