引言:

        函数可以封装重复逻辑,减少冗余代码,提升复用性。本文系统梳理 Python 函数基础概念、五类参数、解包、匿名函数,全部知识点配套可执行示例。

目录

一、函数基础概念

核心目的

术语说明

二、函数五大参数类型(思维导图全覆盖)

1. 位置参数

2. 关键字参数

3. 默认参数

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

可变元组参数 *args

可变字典参数 **kwargs

三、列表、字典解包传参

列表解包 *

字典解包 **

四、匿名函数 lambda

⚠️重要注意事项


一、函数基础概念

核心目的

减少代码编写,提升代码复用效果。

术语说明

  1. def:关键字,定义 / 声明函数
  2. 调用函数:函数名 (),触发执行
  3. 形参(形式参数):定义函数时写在括号内的变量
  4. 实参(实际参数):调用函数传入真实数据
  5. 返回值 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

⚠️重要注意事项

  1. lambda 内部不能使用循环、if 语句块,只能用三元表达式;

python

运行

# 错误写法,不允许
# bad = lambda x: if x>0: print(x)
  1. 逻辑一旦复杂,不要强行使用 lambda,改用 def 定义普通函数,可读性更高;
  2. lambda 没有函数名,报错时堆栈信息不易排查,生产环境慎用超长 lambda。

更多推荐