在 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:
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 的入门用法。下一节介绍函数参数:传参规则、形参组合顺序及调用时的解包。