📖 知识点
什么是函数嵌套
在一个函数内部,再定义另一个函数,就是函数嵌套。
内层函数:只能在外层函数里面调用,脚本全局不能直接调用
内层函数可以读取外层函数的变量
外层函数执行完毕,内层函数的局部变量随之销毁
基础示例
def outer():
print("=== 外层函数启动 ===")
# 定义内层函数
def inner():
print("这是内层函数运行")
# 在外层内部调用内层函数
inner()
print("=== 外层函数结束 ===")
# 调用外层函数
outer()
# inner() # 报错!全局无法直接访问内层函数输出:
=== 外层函数启动 ===
这是内层函数运行
=== 外层函数结束 ===内层读取外层变量:
def outer():
msg = "来自外层的消息"
def inner():
print(msg)
inner()
outer()⚠️ 小提示:内层想要修改外层变量,需要
nonlocal关键字(了解即可,本节课不深入)
⚔️ Kata 实战任务
任务需求:
定义外层函数
calc_total(price, num)在外层内部,定义内层函数
calc_discount(origin),功能:原价打 9 折,返回折扣后价格外层函数先计算商品原价总和(price * num),调用内层函数算出折扣价
外层函数返回最终折扣价格
调用函数:单价 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🧠 思考题
尝试在函数外面直接调用
calc_discount(),会发生什么?为什么?函数嵌套有什么好处?什么时候适合把代码写在内层函数而不是单独写一个全局函数?