Python函数进阶秘籍:闭包、装饰器与作用域全解析(通俗版)

📄 函数说明文档:给函数写"说明书"

我们平时写代码,有时候自己都忘了某个函数是干什么的。这时候,函数说明文档就派上用场了!

💡 简单说:它是写在函数第一行的绿色注释,用来告诉别人这个函数是用来干嘛的。

怎么写?

python 复制代码
def a():
    '''
    我是函数的说明文档
    这是函数的注释,我可以用它来介绍当前函数的作用
    '''
    print('我是函数a')
  • 用三个单引号 ''' 开头和结尾。
  • 写完后按回车,就会变成绿色的注释。
  • 它只能写在函数里面,不能乱放。
  • 调用函数时,别人能看到你的说明,非常方便!

🌟 好处:相当于给函数贴了个标签,以后你或同事看到就知道这个函数是做什么的,不用翻代码猜。

🔁 函数嵌套:把小盒子装进大盒子里

想象一下,你在家里(外层函数)有个房间(内部函数),房间里还有个小柜子(更小的函数)。这就是函数嵌套!

python 复制代码
def func():
    print('我是函数func')

    def func1():
        print('我是func里面的func1')

    def func2():
        print('我是func里面的func2')

    return func2  # 把内部函数"拿"出来使用
  • func1func2 是"内部函数",只能在 func 里用。
  • 但你可以通过 return func2 把它"拿出来",让外面也能调用。
  • 不拿出来?那别人根本不知道它存在,等于白写了。

🛠️ 实际用途:把一些辅助功能藏起来,只暴露你需要的部分,像"黑箱操作"。

🌍 作用域:变量的"家"在哪里?

变量也有自己的"地盘"------叫作用域。

举个例子:

python 复制代码
a = 10  # 全局变量(公共区域)

def item():
    print('我是item')  # 可以访问全局变量a吗?
    global a  # 告诉Python:我要改全局的a
    a = 50  # 现在a变成了50,原来的10被覆盖了
  • 全局变量 :在函数外面定义的,比如 a = 10,整个程序都能用。
  • 局部变量:在函数里定义的,只能在函数内使用。
  • 如果你想在函数里修改全局变量,必须用 global 关键字声明!

🧠 比喻:全局变量是小区公告栏,谁都能看;局部变量是你家门牌号,只有你自己能改。

🧩 闭包:一个"会记事"的函数

什么是闭包?别急,听我打个比方:

🚗 闭包是个车,大家都能用;装饰器是车钥匙,一拧就能启动。

闭包能干嘛?

python 复制代码
def func(x):  # 外层函数
    def func1():  # 内部函数
        print('添加功能')
        x()  # 执行传进来的函数
    return func1  # 返回内部函数
  • func 是个"容器",它接收一个函数 x
  • 它内部定义了一个新函数 func1,这个函数会先打印"添加功能",然后再运行 x()
  • 最后返回 func1,这样别人就可以调用它。

闭包的本质:一个函数 + 记住外部环境的数据。它像一个"功能包",可以重复使用。

✨ 装饰器:给函数"加特效"

现在我们终于到了重头戏------装饰器!

💡 装饰器就是一种"快捷方式",让你在不改原函数代码的情况下,给它加上新功能。

举个栗子:

python 复制代码
@func  # 这就是装饰器!相当于自动调用了 func(a)
def a():
    print('我是函数a')

这行代码的意思是:

  1. 把函数 a 传给 func(闭包);
  2. func 会先执行"添加功能";
  3. 然后再执行 a() 的内容;
  4. 整个过程不需要你手动调用,自动完成!

🎯 好处:功能写一次,多个函数都能用。比如日志记录、权限校验、性能监控......都不用改源码!

🧩 类比:就像你买了一辆新车(函数),想加个导航系统(功能),直接插个U盘(装饰器)就行,不用拆车!

💡 匿名函数:没有名字的"临时工"

有时候你只需要一个简单的功能,不想专门起名字,那就用匿名函数(lambda)。

python 复制代码
func = lambda: print('我是匿名函数')
func()  # 可以正常调用
  • 使用 lambda 关键词创建。
  • 只能写一行代码,适合简单逻辑。
  • 通常用于 map, filter, sorted 等函数式编程场景。
  • ⚠️ 注意:虽然叫"匿名",但它还是可以被赋值给变量使用的。

✅ 总结:一张图读懂核心概念

概念 通俗解释 用途
说明文档 给函数写说明书 方便阅读和维护
函数嵌套 小盒子装进大盒子里 隐藏内部逻辑
作用域 变量的"家" 控制变量可见性
闭包 会记事的函数 存储状态和功能
装饰器 给函数加特效 快速扩展功能
匿名函数 没名字的小助手 简单任务快速处理

📢 写在最后

这些知识点听起来很抽象,但其实它们都是为了解决实际问题而生的:

  • 闭包 → 让函数"记得"之前的状态;
  • 装饰器 → 让你"一键升级"函数功能;
  • 作用域 → 避免变量混乱;
  • 说明文档 → 让代码更有温度。

🌱 初学者可能一时看不懂,没关系! 就像开车,一开始只知道踩油门,后来才明白离合、档位、转向灯......随着项目增多,你会自然理解这些"高级技巧"。

复制代码
相关推荐
深度学习lover5 小时前
<数据集>yolo纸板缺陷识别数据集<目标检测>
python·深度学习·yolo·目标检测·计算机视觉·数据集
oceanstonetree6 小时前
用cosyvoice批量把生成有声书
开发语言·python
java1234_小锋6 小时前
TensorFlow2 Python深度学习 - 循环神经网络(GRU)示例
python·深度学习·gru·tensorflow2
半夏知半秋6 小时前
游戏登录方案中常见的设计模式整理
服务器·开发语言·笔记·学习·游戏·设计模式·lua
云知谷6 小时前
【经典书籍】C++ Primer 第14类虚函数与多态精华讲解
c语言·开发语言·c++·软件工程·团队开发
W.Buffer6 小时前
Java并发工具类详解:Semaphore、CyclicBarrier与CountDownLatch
java·开发语言
王六岁6 小时前
# 🐍 前端开发 0 基础学 Python 入门指南: Python 元组和映射类型深入指南
前端·javascript·python
王六岁6 小时前
# 🐍 前端开发 0 基础学 Python 入门指南:常用的数据类型和列表
前端·javascript·python
南枝异客6 小时前
查找算法-顺序查找
python·算法