大家好~ 今天咱们聚焦Python里最核心、最常用的知识点——函数。
不管是入门刷题、日常办公自动化,还是进阶做爬虫、数据分析,函数都是绕不开的“工具核心”。很多新手觉得函数简单,只会用基础定义,却不懂嵌套、闭包、装饰器这些进阶用法,导致代码冗余、效率低下。

先搞懂最核心的概念:函数是一段封装好的、可重复调用的代码块,用来实现特定功能。
比如我们经常需要计算两个数的和,每次都写a+b太麻烦,把这段逻辑封装成函数,下次直接调用,就能减少重复代码,还能让代码更整洁、更容易维护


关键注意点:
参数分为「必传参数」(如a)和「默认参数」(如b=10),默认参数必须放在必传参数后面,否则会报错;
调用时可以用「位置传参」(按参数顺序)或「关键字传参」(指定参数名),关键字传参更清晰,适合参数较多的场景;
文档字符串(""" """)不是必须的,但建议写,方便自己和他人理解函数功能。

理解要点:
*args:接收所有位置参数,打包成一个元组(可以理解为“不确定个数的普通参数”);
**kwargs:接收所有关键字参数,打包成一个字典(可以理解为“不确定个数的键值对参数”);
两者同时使用时,*args必须放在**kwargs前面。
return的作用是“返回函数的执行结果”,有3个关键特性,新手很容易踩坑:
函数中没有return,默认返回None;
return可以返回单个值,也可以返回多个值(用逗号分隔,本质是返回一个元组);
return执行后,函数会立即终止,后面的代码不会执行。
匿名函数,即没有名字的函数,用lambda关键字定义,语法简洁,适合实现简单的、只需要使用一次的功能(无需单独定义函数名,减少代码冗余)。
Python中匿名函数的定义格式:

核心特点:
没有函数名,只能使用一次(通常配合其他函数使用,如map、filter等);
表达式只能有一个,执行结果就是函数的返回值,无需写return;
参数可以有多个,用逗号分隔,支持默认参数。
实操案例:匿名函数的常见用法



递归函数,就是函数自己调用自己的函数,核心是将复杂问题拆解成与原问题相似的、更小的子问题,直到子问题可以直接解决(终止条件)。
递归的两个核心要素(缺一不可,否则会陷入无限递归,导致程序崩溃):
终止条件:递归停止的条件(当子问题无法再拆解时,返回具体值);
递归公式:将原问题拆解为子问题,用自身函数调用解决子问题。
适用场景:阶乘计算、斐波那契数列、树结构遍历(如二叉树遍历)、复杂嵌套数据的解析等。


关键注意点:
必须设置明确的终止条件,否则会出现无限递归(RecursionError),导致程序崩溃;
递归深度有限制:Python默认递归深度约为1000,若需处理更深的递归,需手动设置递归深度(不推荐,建议用循环替代);
简单递归可能存在重复计算(如斐波那契数列),可通过缓存(如lru_cache装饰器)优化效率。


嵌套函数,顾名思义,就是「在一个函数内部定义另一个函数」。外层的函数叫“外函数”,内层的叫“内函数”。
核心作用:隐藏内部逻辑(内函数只能在外函数内部调用,外部无法直接访问),让代码更模块化。
实操案例:嵌套函数实现“计算一个数的平方和立方”

关键注意点:
内函数可以访问外函数的变量/参数,但不能直接修改(如果要修改,需要用nonlocal关键字声明);
内函数只能在外函数内部调用,外部无法直接访问,保证了代码的安全性。

闭包是嵌套函数的一种特殊情况,满足3个条件(缺一不可):
存在嵌套函数(外函数和内函数);
内函数引用了外函数的非全局变量(外函数的参数或局部变量);
外函数的返回值是内函数本身(不是内函数的执行结果,而是内函数对象)。
闭包的核心价值:保留外函数的变量状态,即使外函数执行完毕,内函数依然能访问到外函数的变量。

为什么要用闭包?
比如上面的计数器,如果不用闭包,每次调用都要重新初始化count,无法保留计数状态;用闭包后,每个计数器对象都有自己的count,互不干扰,代码更简洁、高效。

装饰器是闭包的最常用场景,本质是「一个接收函数作为参数,并返回一个新函数的函数」。
核心作用:在不修改原函数代码、不改变原函数调用方式的前提下,给原函数增加额外功能(比如日志打印、计时、权限验证等)。
日常工作中,装饰器用得非常多,比如接口请求的权限校验、爬虫的反爬延迟、代码的执行耗时统计,都可以用装饰器实现。
实操案例:用装饰器给函数增加“执行耗时统计”功能


理解要点:
@time_count 是装饰器的语法糖,简化了“func1 = time_count(func1)”的写法;
装饰器的wrapper函数接收*args和**kwargs,是为了兼容不同参数个数、不同参数类型的原函数;
wrapper函数必须返回原函数的执行结果(result),否则原函数调用后会丢失返回值。
如果我们想给装饰器传递参数(比如控制日志的打印级别、控制耗时统计的保留小数位数),就需要在基础装饰器的外层,再套一个“参数函数”。
实操案例:带参数的装饰器,控制耗时统计的小数位数



一个函数可以同时使用多个装饰器,执行顺序是「从下到上」(先执行下面的装饰器,再执行上面的装饰器)。
实操案例:给函数同时增加“日志打印”和“耗时统计”功能




今天我们从基础到进阶,完整梳理了Python函数的核心知识点,总结一下重点:
基础函数:掌握定义、调用、参数(必传、默认、*args、**kwargs)、返回值,能独立编写简单函数;
匿名函数:用lambda定义,简洁高效,适合简单逻辑,常配合map、filter等函数使用;
递归函数:函数自我调用,需具备终止条件和递归公式,适合拆解复杂问题;
嵌套函数:函数内部套函数,隐藏内部逻辑,内函数可访问外函数参数;
闭包:满足3个条件,核心是“保留外函数变量状态”,面试常考;
装饰器:闭包的实战应用,不修改原函数,给函数增加额外功能,日常工作高频使用。
实操建议:
每个案例都复制到Python编辑器中运行,修改参数、调试代码,加深理解;
尝试自己写一个装饰器(比如“权限验证装饰器”),巩固进阶知识点;
函数的核心是“复用”和“模块化”,写代码时多思考:哪些逻辑可以封装成函数,减少重复代码。
如果想学习Python更多相关可以关注我,学习更多Python从零到精通等等。
后续会持续更新Python入门、进阶、实战内容,从基础语法到爬虫、数据分析、自动化办公,手把手带大家从新手成长为Python高手,记得关注不迷路哦~