一、函数的基本概念:“封装重复操作的工具”
可以把函数理解为生活中的 “工具”:比如计算器的 “加法功能”,你输入两个数(原料),它执行加法操作(加工),最后返回结果(成品)。
- 核心价值:将重复使用的代码块封装起来,避免重复写相同逻辑,只需 “调用” 即可。
- 基本结构:定义(造工具)→ 调用(用工具)。
1. 函数的定义与调用(最基础)
用def关键字定义函数,语法:
def 函数名(参数列表):
"""函数文档字符串(可选,说明函数功能)"""
函数体(要执行的代码)
[return 返回值] # 可选
示例 1:无参数、无返回值的函数
# 定义:封装“打印欢迎语”的逻辑
def print_welcome():
"""打印欢迎语"""
print("欢迎学习Python函数!")
# 调用:使用这个函数(必须调用才会执行)
print_welcome() # 输出:欢迎学习Python函数!
示例 2:有参数、有返回值的函数
# 定义:封装“计算两数之和”的逻辑
def add(a, b):
"""计算两个数的和并返回结果
参数:
a: 第一个数
b: 第二个数
返回:
两数之和
"""
result = a + b
return result # 返回计算结果
# 调用:传入参数,接收返回值
sum_result = add(3, 5)
print(sum_result) # 输出:8
# 直接调用并打印
print(add(10, 20)) # 输出:30
二、函数的参数:“给工具传原料的方式”
参数是函数的 “输入”,Python 支持多种参数类型,适配不同使用场景,核心分为 4 类:
1. 必选参数(位置参数)
最基础的参数,调用时必须按顺序传入,缺一不可。
# 定义:必选参数name、age
def introduce(name, age):
print(f"我叫{name},今年{age}岁")
# 正确调用:按位置传参
introduce("张三", 18) # 输出:我叫张三,今年18岁
# 错误调用:少传参数(会报错TypeError)
# introduce("李四") # 报错:缺少age参数
2. 默认参数
定义时给参数指定默认值,调用时可省略该参数(用默认值),默认参数必须放在必选参数后面。
# 定义:grade是默认参数(默认值为"高一")
def introduce(name, age, grade="高一"):
print(f"我叫{name},今年{age}岁,读{grade}")
# 调用1:省略默认参数(用默认值)
introduce("张三", 18) # 输出:我叫张三,今年18岁,读高一
# 调用2:覆盖默认参数
introduce("李四", 17, "初二") # 输出:我叫李四,今年17岁,读初二
3. 可变参数(*args、**kwargs)
处理 “不确定数量的参数”,分为两种:
*args:接收任意数量的位置参数,打包成元组;**kwargs:接收任意数量的关键字参数(key=value 形式),打包成字典。
示例 1:*args(接收多个位置参数)
# 定义:计算任意个数的和
def sum_many(*args):
total = 0
for num in args: # args是元组,可遍历
total += num
return total
# 调用:传入任意个数的参数
print(sum_many(1, 2)) # 输出:3
print(sum_many(1, 2, 3, 4)) # 输出:10
示例 2:**kwargs(接收多个关键字参数)
# 定义:打印学生的任意信息(姓名、年龄、成绩等)
def print_student(**kwargs):
for key, value in kwargs.items(): # kwargs是字典,可遍历键值对
print(f"{key}:{value}")
# 调用:传入任意个key=value参数
print_student(name="张三", age=18, math=90)
# 输出:
# name:张三
# age:18
# math:90
4. 关键字参数(keyword arguments)
调用时用参数名=值的形式传参,顺序可任意,适合参数多的场景。
def introduce(name, age, grade):
print(f"我叫{name},今年{age}岁,读{grade}")
# 关键字参数调用:顺序可打乱
introduce(age=18, name="张三", grade="高一") # 输出:我叫张三,今年18岁,读高一