Python函数定义与调用教程:零基础学会代码复用

Jasper
Jasper
发布时间:2026-10-22 | 5人浏览过
原创

在编写Python程序时,如果一段实现特定功能的代码需要在不同地方反复运行,直接复制粘贴不仅会导致代码冗长臃肿,还会让后续的维护变得极为困难。解决这一问题的根本工具是“函数”。掌握函数的定义(def)与调用,是编程从“零碎脚本”迈向“结构化程序设计”的关键一步。本文将系统梳理Python函数的语法规范、参数传递、返回值机制以及常见误区,带你彻底掌握代码复用的基础。

一、认识函数:从重复计算到一键复用

假设我们正在开发一个简易的计税工具,需要计算多笔订单的增值税并输出明细。初学者往往会写出如下的直线型代码:

# 订单1计税
price_1 = 100
tax_1 = price_1 * 0.13
print(f"订单金额:{price_1},税额:{tax_1}")

# 订单2计税
price_2 = 250
tax_2 = price_2 * 0.13
print(f"订单金额:{price_2},税额:{tax_2}")

# 订单3计税
price_3 = 480
tax_3 = price_3 * 0.13
print(f"订单金额:{price_3},税额:{tax_3}")

当税率需要从13%调整为9%时,你必须在每个计算公式中逐一查找并修改。如果代码分布在成百上千行中,遗漏和手误几乎不可避免。函数的出现正是为了解决这种“重复劳动”:它将实现特定功能的一组语句打包并赋予名字,需要使用时只需通过名字调用即可。

Python函数定义与调用教程:零基础学会代码复用
图1:代码复制与函数复用的对比

二、函数的标准语法与定义规范

在Python中,定义一个函数必须遵循严格的语法格式:以关键字 def(define的缩写)开头,紧接着是函数名称、圆括号(可包含参数列表),末尾必须有英文冒号 :,随后缩进编写函数体。

def 函数名(参数1, 参数2, ...):
    """文档字符串(可选,用于说明函数功能)"""
    执行语句1
    执行语句2
    return 返回结果

定义函数时有以下三条不可忽视的规则:

  • 命名规范:推荐使用小写字母和下划线组合(如 calculate_tax、send_email),名称应当清晰表达该函数“做了什么”。
  • 缩进必须一致:Python使用缩进界定代码块范围,函数体内的所有语句必须保持相同的缩进(通常为4个空格)。
  • 定义并不等于执行:运行包含 def 的代码行时,Python只是在内存中创建了一个函数对象,只有在显式调用时,内部的代码才会真正跑起来。

三、函数的四步操作执行流程

从开始编写到获取计算结果,完整使用函数需要经历以下四个标准步骤:

  1. 声明与命名:使用 def 关键字声明函数,给功能起一个见名知意的名称。
  2. 指定形参:在圆括号中定义用于接收外部输入的变量(形式参数)。
  3. 编写处理逻辑与返回值:缩进编写计算过程,最后使用 return 将运算成果传回外部。
  4. 传实参调用:在主程序中写出函数名并传入实际数值,捕获并打印结果。
Python函数定义与调用教程:零基础学会代码复用
图2:Python函数构建与调用的四步操作流程

下面是一个完整的可执行演示:计算矩形面积并输出。

# 步骤1与步骤2:定义函数名及形参
def get_rectangle_area(width, height):
    """计算矩形面积"""
    # 步骤3:内部计算并返回结果
    area = width * height
    return area

# 步骤4:传入实参调用函数,并接收返回值
result = get_rectangle_area(10, 5)
print(f"矩形的计算面积为:{result}")

运行结果示例:

矩形的计算面积为:50

四、核心原理拆解:形参与实参的数据流

很多初学者容易将“形式参数(形参)”与“实际参数(实参)”混淆。可以把形参看作是函数内部准备好的空白信封,而实参则是调用者在外部塞入信封的真实信件。

Python函数定义与调用教程:零基础学会代码复用
图3:形参与实参的数据交互及作用域生命周期

参数不仅可以按位置传入,还支持默认值与关键字传参:

  • 位置参数:按照定义时参数的先后顺序依次对应。例如 get_rectangle_area(10, 5) 中,10对应width,5对应height。
  • 关键字参数:调用时指明形参名字,顺序可以打乱。例如 get_rectangle_area(height=5, width=10)。
  • 默认参数:在定义函数时为某个形参提供默认初始值。如果调用时没有传该参数,就直接使用默认值。
def greet(name, prefix="您好"):
    return f"{prefix},{name}!"

# 使用默认值
print(greet("张三"))          # 输出:您好,张三!
# 覆盖默认值
print(greet("李四", "欢迎"))   # 输出:欢迎,李四!

五、常见认知误区与辨析

常见误区一:打印(print)就等于返回(return)吗?
很多初学者觉得在函数里写了 print(),屏幕上能显示内容,就以为任务完成了。实际上,print() 的作用仅仅是把字符输出到屏幕给人类看;而 return 是将数据返回给程序,让后续的代码可以把这个结果保存进变量、存入数据库或进行二次计算。没有 return 的函数默认会隐式返回 None。

常见误区二:在函数外可以直接访问函数里的变量吗?
在函数内部赋值创建的变量属于局部变量。函数开始执行时局部变量被创建,函数结束返回后局部命名空间就会被销毁。在函数外部直接读取 area 会抛出 NameError: name 'area' is not defined。如果需要外部使用内部产生的数据,唯一的规范路径就是通过 return 将其传出。

六、知识总结:函数核心要点全景

为了便于随时回顾,我们将Python函数的核心组成部分、行为规范以及最佳实践总结如下表与全景图所示:

Python函数定义与调用教程:零基础学会代码复用
图4:Python函数知识体系与核心规则全景总结

在后续的编程实践中,每当发现一段代码需要被多次运行,或者单个逻辑超过二三十行时,都可以主动停下来思考:是否可以将这段逻辑抽象为一个独立的函数?通过坚持这种模块化的思维,编写的代码不仅结构清爽,更能在面对复杂需求变更时游刃有余。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表