python--函数(1)

24 阅读3分钟

一、函数的基本概念:“封装重复操作的工具”

可以把函数理解为生活中的 “工具”:比如计算器的 “加法功能”,你输入两个数(原料),它执行加法操作(加工),最后返回结果(成品)。

  • 核心价值:将重复使用的代码块封装起来,避免重复写相同逻辑,只需 “调用” 即可。
  • 基本结构:定义(造工具)→ 调用(用工具)。

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岁,读高一