← Backend / Python / 基础专题

10_函数定义参数与返回值

用函数封装可复用逻辑,正确使用位置参数、关键字参数和默认值。

Python 基础专题 10:函数、参数与返回值

学习目标:用函数封装可复用逻辑,正确使用位置参数、关键字参数和默认值。

核心知识

def 定义函数。参数是函数内部的名字,调用时传入的对象是实参。执行到 return 就结束函数并返回值;没有显式返回时返回 None。函数应有清楚的输入、输出和失败约定,避免把打印结果误认为返回结果。

def total_price(price: int, count: int = 1) -> int:
    if price < 0 or count < 0:
        raise ValueError("价格和数量不能为负")
    return price * count

assert total_price(12, 3) == 36
assert total_price(price=12) == 12

位置参数按顺序传入,关键字参数用名字传入。*args 收集多余位置参数为元组,**kwargs 收集多余关键字参数为字典;只在确实需要变长接口时使用。def f(a, /, b, *, c) 中 / 前只允许位置传参,* 后只允许关键字传参。多个返回值实际组成元组,可写 value, error = parse() 拆包。

默认参数在定义函数时求值,所以不要用可变列表作默认值。写 items=None,在函数内创建新列表。类型注解便于阅读和静态检查,默认并不会在运行时强制转换实参。

逐步理解

调用 total_price(12, 3) 时,price 和 count 分别绑定到整数 12、3;执行到 return 后把 36 交回调用处。若函数只 print(36),调用者得到的是 None,无法继续计算。写函数前先用一句话说明契约,例如“接受非负价格和数量,返回总价,非法值抛 ValueError”。

动手练习

练习:写 discount(price, rate=0.9),拒绝负价及不在 0 到 1 之间的折扣。答案要点:先校验范围,再 return price * rate。