Python基础函数定义与调用代码写法

码头散步
码头散步
发布时间:2026-10-25| 5人浏览过
原创
在 Python 中,函数是组织好的、可重复利用的代码块。掌握函数的基本写法只需要理清两件事:如何使用 def 关键字定义函数并声明执行逻辑,以及如何在后续代码中通过函数名配合圆括号 () 完成调用与传参。本文将围绕函数声明的语法要素、参数传递机制、返回值控制及实际调用步骤展开完整讲解。

一、函数的基本定义与调用语法

Python 使用 def(define 的缩写)作为定义函数的起始关键字。紧随其后的是函数名称、存放形参列表的圆括号 (),以及标志代码块开始的英文冒号 :。函数体必须整体保持缩进(通常为4个空格)。

定义函数只是在内存中注册了该逻辑段落,它本身不会主动执行。要执行函数体中的代码,必须在代码中显式写出函数名并附加括号进行“调用”。

# 1. 最基础的无参函数定义
def say_hello():
    print("你好,欢迎学习Python基础函数!")

# 2. 函数调用
say_hello()

# 示例输出:
# 你好,欢迎学习Python基础函数!

如果省略了调用时末尾的括号 (),Python 不会执行函数代码,而是直接将函数对象本身作为引用返回。这是初学者在编码时最常见的疏漏之一。

Python基础函数定义与调用代码写法
图1:Python 函数定义(def声明)与函数调用(括号触发)语法结构拆解对照

二、参数传递:形参、实参与传参模式

在函数定义的小括号中声明的变量被称为形式参数(形参);而在调用函数时传入的具体数值或对象称为实际参数(实参)。Python 提供了灵活的参数绑定方式,常用形式包括位置参数、关键字参数与默认参数。

1. 位置参数与关键字参数

位置参数要求实参按照形参声明的相对次序依次代入。而关键字参数则允许在调用时明确写出形参名(形如 param_name=value),此时参数的位置顺序可以颠倒。

def build_profile(name, role, city):
    print(f"姓名: {name} | 岗位: {role} | 城市: {city}")

# 按照位置传递:必须严格按顺序
build_profile("李雷", "后端研发", "上海")

# 按照关键字传递:顺序自由,意图明确
build_profile(city="杭州", name="韩梅梅", role="数据分析")

2. 默认参数

如果在定义函数时某个形参经常拥有固定取值,可以在定义时直接为其赋初值。调用者若不传入该项实参,函数将自动使用预设的默认值;若传入实参,则默认值被覆盖。

语法规则约束:带有默认值的参数必须位于没有默认值的参数后面,否则 Python 解释器在语法解析阶段会直接抛出 SyntaxError: non-default argument follows default argument 异常。

# country 带有默认值,必须排在无默认值的 name 之后
def register_user(name, country="中国"):
    print(f"用户: {name}, 国籍: {country}")

register_user("王小明")               # 采用默认国籍: 中国
register_user("Alice", country="英国")  # 覆写默认值: 英国
Python基础函数定义与调用代码写法
图2:Python 三种基础传参方式(位置、关键字、默认参数)的数据传递机制对比

三、函数返回值:return 语句的工作原理

函数不仅接收输入,往往还需要产出运算结果。Python 通过 return 语句将数据从函数内部传递回调用点。

1. return 的终止与传递特性

一旦执行到 return,函数会立即停止后续所有代码的运行,并将紧随其后的表达式结果作为返回值交出。如果在函数中没有显式书写 return,或者单独写了不带任何表达式的 return,Python 会隐式返回内置对象 None。

def check_positive(number):
    if number <= 0:
        return "非正数"  # 条件满足时立即退出函数
    
    # 若上面已 return,下面代码绝不会执行
    return "正数"

res1 = check_positive(-5)
res2 = check_positive(8)
print(res1, res2)  # 输出: 非正数 正数

2. 返回多个值与解包语法

Python 允许在 return 后使用逗号分隔多个表达式。从底层实现来看,Python 实际上是将这些数据打包成了一个元组(tuple)返回。调用者既可以用一个变量接收整个元组,也可以使用多变量解包语法分别接收各个数据项。

def calculate_stat(numbers):
    total = sum(numbers)
    count = len(numbers)
    avg = total / count
    return total, avg  # 返回一个由两个元素组成的元组

# 方式 A:单变量接收元组
summary = calculate_stat([10, 20, 30])
print(summary)        # 输出: (60, 20.0)

# 方式 B:多变量直接解包(更推荐的清晰写法)
total_sum, average = calculate_stat([10, 20, 30])
print(f"总和: {total_sum}, 平均值: {average}")  # 输出: 总和: 60, 平均值: 20.0

四、函数调用完整生命周期的执行流程

理解函数调用的底层跳转机制,有助于排查变量作用域问题与递归执行逻辑。当解释器运行至函数调用语句时,执行流程会经历以下五个确定性步骤:

Python基础函数定义与调用代码写法
图3:Python 函数被调用时的完整执行生命周期与流程流转机制

五、编写与调用函数的常见注意点

1. 默认参数切勿使用可变对象(如列表、字典)

Python 函数的默认参数在函数定义时仅被求值一次,而不是每次调用时重新创建。如果默认参数使用列表([])或字典({}),多次调用并向其追加数据时,该默认对象会在所有调用之间共享,从而引发难以察觉的数据污染。

# 错误写法:可变对象作为默认参数
def append_wrong(item, target_list=[]):
    target_list.append(item)
    return target_list

print(append_wrong(1))  # 输出: [1]
print(append_wrong(2))  # 意外输出: [1, 2],而不是预期的 [2]!

# 正确做法:默认值设为 None,在函数体内部判定并新建对象
def append_correct(item, target_list=None):
    if target_list is None:
        target_list = []
    target_list.append(item)
    return target_list

print(append_correct(1))  # 输出: [1]
print(append_correct(2))  # 输出: [2],相互独立

2. 局部变量与全局变量的作用域边界

在函数内部直接定义的变量属于局部变量(Local Scope),仅在该函数执行期间可见,函数外部无法直接访问。如果需要在函数内部修改全局变量的值,必须使用 global 关键字显式声明;但在常规业务开发中,应尽量通过“传参输入 + return 输出”保持函数的无副作用特性(纯函数)。

核心提醒 尽量让函数维持“黑盒”状态:通过参数接受全部依赖,通过 return 返回运算产物,避免在函数内直接修改外部全局变量,这样能大幅降低调试难度并提高代码复用率。

六、全文核心知识速查与检查清单

在完成函数编写与调试时,可通过以下清单核对代码的规范性:

检查维度 标准写法要求 常见报错 / 违规症状
函数声明 def 函数名(形参): 结尾带冒号,函数体统一缩进 SyntaxError: invalid syntax(常因漏写冒号引起)
函数调用 使用 func() 附加圆括号触发执行 仅输出 <function func at 0x...>,无执行结果
参数声明顺序 无默认值参数在前,默认参数在后 SyntaxError: non-default argument follows default argument
传参数量 位置实参数量与必需形参数量严格相等 TypeError: missing required positional argument
返回值控制 需要传递结果时显式写 return 变量接收到 None
Python基础函数定义与调用代码写法
图4:Python 基础函数定义与调用核心法则及排查检查清单
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。