在 Python 中,函数(function)将一段可复用逻辑绑定到名称上,需要时通过调用执行。定义使用 def,形参写在括号内,函数体须缩进;若需向调用方交回结果,使用 return。重复出现的计算、格式化输出或校验步骤适合封装为函数,主流程则保留调用关系。本节从最简单的定义入手,说明参数、返回值、默认实参及可变实参的入门写法。

无参函数与多次调用

无参数且无 return 的函数可在函数体内直接执行操作。定义完成后可多次调用,无需复制同一段代码:

def greet():
    print("Hello!")

greet()
greet()

输出:

Hello!
Hello!

形参、实参与调用

def 后为函数名与括号;冒号之后缩进块为函数体。括号内的名称为形参,调用时传入的值为实参,形参在函数内部按局部变量使用:

def greet(name):
    print(f"你好,{name}")

greet("小明")
greet("小红")

输出:

你好,小明
你好,小红

返回值 return

return 结束当前函数,并将其后表达式的值作为调用结果。结果可赋给变量或参与其他表达式。若函数执行完毕而从未遇到 return,则调用结果为 None:

Python 函数定义与返回值示例运行
def add(a, b):
    return a + b

result = add(3, 5)
print(result)        # 8

def say_hi():
    print("hi")

print(say_hi())      # 先打印 hi,再打印 None

默认参数

形参可指定默认值;调用时若省略对应实参,则使用默认值,若传入实参则覆盖默认值。带默认值的形参通常放在参数列表后部:

def greet(name, greeting="你好"):
    print(f"{greeting},{name}")

greet("小明")
greet("小红", "早上好")

关键字实参

调用时写成 形参名=值 即为关键字实参,不依赖形参在定义中的先后顺序。位置实参与关键字实参可混用,但位置实参须写在关键字实参之前:

def info(name, age, city):
    print(f"{name} {age} {city}")

info(age=20, city="北京", name="小明")
info("小红", 18, "上海")

不定长实参 *args 与 **kwargs

实参个数事先不确定时,可用 *args 将多余位置实参收为元组,用 **kwargs 将多余关键字实参收为字典。标识符 args、kwargs 为约定,亦可改用其他名称:

def total(*nums):
    return sum(nums)

print(total(1, 2, 3))        # 6
print(total(10, 20))         # 30

def show(**kw):
    for k, v in kw.items():
        print(f"{k}={v}")

show(name="Tom", age=18)

使用函数的意义

  • 同一逻辑定义一次、多处调用,减少重复代码。
  • 函数名可概括意图,主流程更易阅读。
  • 修改实现时通常只需改动函数内部,调用点影响较小。
  • 可针对单一函数构造输入,单独验证其行为。

常见错误

  • 默认参数勿使用可变对象(如 def f(x=[])),否则列表在多次调用间共享;应写成 def f(x=None),在函数内判断后新建列表。
  • 须先定义再调用;名称尚未绑定时调用将引发 NameError。
  • 若后续代码依赖计算结果,须使用 return,否则得到的是 None。

本节说明了 Python 中函数的定义、return、默认参数与 *args / **kwargs 的入门用法。下一节介绍函数参数:传参规则、形参组合顺序及调用时的解包。