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 等函数式编程场景。
  • ⚠️ 注意:虽然叫"匿名",但它还是可以被赋值给变量使用的。

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

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

📢 写在最后

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

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

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

复制代码
相关推荐
wifi___4 小时前
全局异常处理的原理
java·开发语言
平常心的技术小牛7 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆8 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
Python私教8 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
余额瞒着我当琳9 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪10 小时前
WebClient内存配置解析
开发语言·springboot·webflux
北斗落凡尘10 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
jdksjw10 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠10 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
Mike_Zhang11 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch