Python函数基础实战教程:从定义调用到参数传值全解析

一、Python函数核心意义:为什么要学函数基础?

Python函数是代码复用、逻辑封装的核心载体,也是新手从「线性代码编写」过渡到「模块化编程」的关键。无论是自动化脚本、数据分析还是Web开发,函数都能让代码更简洁、易维护——比如重复执行10次的数据分析逻辑,封装成函数后只需调用1行代码,而非复制粘贴10遍。

二、函数基础:定义与调用的3步核心操作

1. 函数定义:最基础的语法结构

Python函数通过def关键字定义,核心结构包含「函数名、参数、函数体、返回值」4个部分,零基础也能快速上手:

# 基础格式:def 函数名(参数): 函数体; return 返回值
def calculate_sum(a, b):
    """计算两个数的和(函数文档字符串,可选但推荐)"""
    result = a + b
    return result  # 返回计算结果

关键说明

  • def:固定关键字,必须以冒号:结尾;
  • 函数名:遵循小写+下划线命名规则(如calculate_sum),避免与Python内置函数重名(如sumlen);
  • 参数:括号内的变量(如ab),是函数接收的输入;
  • 函数体:缩进(4个空格)的代码块,是函数的核心逻辑;
  • return:可选,用于返回结果,无return则默认返回None

2. 函数调用:让函数「跑起来」

定义函数后需调用才能执行,调用格式为「函数名(参数值)」,示例如下:

# 调用上面定义的calculate_sum函数
total = calculate_sum(3, 5)
print(total)  # 输出:8

# 无返回值函数的调用
def print_hello():
    print("Hello Python函数!")

print_hello()  # 输出:Hello Python函数!

新手避坑:调用函数时参数数量必须与定义匹配(如定义2个参数却传1个,会报TypeError)。

3. 函数文档字符串:提升代码可读性

在函数开头用三引号""" """编写说明,既是注释也是「函数说明书」,通过help()可查看:

# 查看函数文档
help(calculate_sum)
# 输出:
# Help on function calculate_sum in module __main__:
# calculate_sum(a, b)
#     计算两个数的和(函数文档字符串,可选但推荐)

三、参数传递:必选/默认/可变参数全解析

参数是函数的「输入接口」,新手需重点掌握3类常用参数,解决「传值不对」的核心问题。

1. 必选参数(位置参数)

最基础的参数类型,调用时必须按顺序传入,数量不能多也不能少:

# 定义必选参数函数
def get_info(name, age):
    print(f"姓名:{name},年龄:{age}")

# 正确调用(按位置传参)
get_info("张三", 25)  # 输出:姓名:张三,年龄:25

# 错误调用(少传参数)
get_info("李四")  # 报错:TypeError: get_info() missing 1 required positional argument: 'age'

2. 默认参数:给参数设「默认值」

调用时可省略的参数,适合「大部分场景固定值,少数场景需修改」的需求:

# 定义带默认参数的函数(默认城市为北京)
def get_user_info(name, age, city="北京"):
    print(f"姓名:{name},年龄:{age},城市:{city}")

# 调用1:使用默认城市
get_user_info("王五", 30)  # 输出:姓名:王五,年龄:30,城市:北京

# 调用2:修改默认城市
get_user_info("赵六", 28, "上海")  # 输出:姓名:赵六,年龄:28,城市:上海

注意:默认参数必须放在必选参数后面,否则会报语法错误。

3. 可变参数:接收任意数量的参数

当不确定参数数量时,用*args(接收任意数量位置参数)或**kwargs(接收任意数量关键字参数):

# 1. *args:接收多个位置参数(打包成元组)
def sum_many(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_many(1,2,3))  # 输出:6
print(sum_many(5,10,15,20))  # 输出:50

# 2. **kwargs:接收多个关键字参数(打包成字典)
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}:{value}")

print_info(name="孙七", age=35, job="工程师")
# 输出:
# name:孙七
# age:35
# job:工程师

四、返回值:函数的「输出结果」

return语句决定函数的输出,新手需掌握3个核心要点:

1. 单个返回值

def get_max_num(a, b):
    if a > b:
        return a
    else:
        return b

max_num = get_max_num(9, 6)
print(max_num)  # 输出:9

2. 多个返回值(实际返回元组)

def get_num_info(num):
    square = num * num
    cube = num * num * num
    return square, cube  # 逗号分隔,返回元组

s, c = get_num_info(3)  # 解包接收
print(s, c)  # 输出:9 27

3. 无返回值(默认返回None)

def print_warning():
    print("警告:参数格式错误!")

result = print_warning()
print(result)  # 输出:None

五、函数基础常见错误与解决

错误现象 根本原因 解决方法
TypeError: 'int' object is not callable 函数名与变量名重名(如定义了sum=10,又调用sum()) 修改变量名,避免与函数名/内置函数重名
IndentationError 函数体未缩进或缩进不一致 统一用4个空格缩进,函数体必须在def下缩进
UnboundLocalError 函数内修改全局变量未声明global 修改全局变量前加global 变量名(如global count
参数传值顺序混乱 混合位置参数和关键字参数时顺序错 关键字参数必须放在位置参数后面(如func(1, 2, c=3)

六、函数基础实战案例:封装实用小功能

案例1:判断是否为闰年

def is_leap_year(year):
    """判断年份是否为闰年"""
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    else:
        return False

print(is_leap_year(2024))  # 输出:True
print(is_leap_year(2025))  # 输出:False

案例2:计算列表平均值

def calculate_average(num_list):
    """计算列表中数字的平均值"""
    if not num_list:  # 处理空列表
        return 0
    total = sum(num_list)
    average = total / len(num_list)
    return round(average, 2)  # 保留2位小数

nums = [10, 20, 30, 40]
print(calculate_average(nums))  # 输出:25.0
print(calculate_average([]))  # 输出:0
posted @ 2025-12-08 21:00  python农工  阅读(0)  评论(0)    收藏  举报