內功篇-Day41 函数嵌套

0 次阅读 2026-10-19 08:42

📖 知识点

什么是函数嵌套

在一个函数内部,再定义另一个函数,就是函数嵌套。

  • 内层函数:只能在外层函数里面调用,脚本全局不能直接调用

  • 内层函数可以读取外层函数的变量

  • 外层函数执行完毕,内层函数的局部变量随之销毁

基础示例

def outer():
    print("=== 外层函数启动 ===")
    # 定义内层函数
    def inner():
        print("这是内层函数运行")
    # 在外层内部调用内层函数
    inner()
    print("=== 外层函数结束 ===")

# 调用外层函数
outer()
# inner() # 报错!全局无法直接访问内层函数

输出:

=== 外层函数启动 ===
这是内层函数运行
=== 外层函数结束 ===

内层读取外层变量:

def outer():
    msg = "来自外层的消息"
    def inner():
        print(msg)
    inner()

outer()

⚠️ 小提示:内层想要修改外层变量,需要 nonlocal 关键字(了解即可,本节课不深入)

⚔️ Kata 实战任务

任务需求:

  1. 定义外层函数 calc_total(price, num)

  2. 在外层内部,定义内层函数 calc_discount(origin),功能:原价打 9 折,返回折扣后价格

  3. 外层函数先计算商品原价总和(price * num),调用内层函数算出折扣价

  4. 外层函数返回最终折扣价格

  5. 调用函数:单价 100,数量 3;打印最终应付金额

参考代码

def calc_total(price, num):
    # 内层函数:计算9折优惠
    def calc_discount(origin):
        return origin * 0.9
    
    total_origin = price * num
    final_price = calc_discount(total_origin)
    return final_price

res = calc_total(100, 3)
print(f"打折后总价:{res}")

运行输出:

打折后总价:270.0

🧠 思考题

  1. 尝试在函数外面直接调用 calc_discount(),会发生什么?为什么?

  2. 函数嵌套有什么好处?什么时候适合把代码写在内层函数而不是单独写一个全局函数?