当前位置:首页>python>一文带你学会Python的函数知识点

一文带你学会Python的函数知识点

  • 2026-10-03 12:24:27
一文带你学会Python的函数知识点

大家好~ 今天咱们聚焦Python里最核心、最常用的知识点——函数。

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

一、基础入门:什么是函数?为什么要用函数?

先搞懂最核心的概念:函数是一段封装好的、可重复调用的代码块,用来实现特定功能。

比如我们经常需要计算两个数的和,每次都写a+b太麻烦,把这段逻辑封装成函数,下次直接调用,就能减少重复代码,还能让代码更整洁、更容易维护

1.1. 函数的基础定义与调用

Python中函数的定义格式:
实操案例:定义一个计算两数之和的函数,支持默认参数

关键注意点:

  • 参数分为「必传参数」(如a)和「默认参数」(如b=10),默认参数必须放在必传参数后面,否则会报错;

  • 调用时可以用「位置传参」(按参数顺序)或「关键字传参」(指定参数名),关键字传参更清晰,适合参数较多的场景;

  • 文档字符串(""" """)不是必须的,但建议写,方便自己和他人理解函数功能。

1.2. 函数的参数进阶

除了基础的必传参数和默认参数,Python还有两种灵活的传参方式,应对不确定参数个数的场景:可变位置参数(*args)和可变关键字参数(**kwargs)。
实操案例:用*args和**kwargs实现“任意个数的参数求和+打印额外信息”

理解要点:

  • *args:接收所有位置参数,打包成一个元组(可以理解为“不确定个数的普通参数”);

  • **kwargs:接收所有关键字参数,打包成一个字典(可以理解为“不确定个数的键值对参数”);

  • 两者同时使用时,*args必须放在**kwargs前面。

1.3. 函数的返回值

return的作用是“返回函数的执行结果”,有3个关键特性,新手很容易踩坑:

  1. 函数中没有return,默认返回None;

  2. return可以返回单个值,也可以返回多个值(用逗号分隔,本质是返回一个元组);

  3. return执行后,函数会立即终止,后面的代码不会执行。

1.4. 匿名函数(lambda函数)

匿名函数,即没有名字的函数,用lambda关键字定义,语法简洁,适合实现简单的、只需要使用一次的功能(无需单独定义函数名,减少代码冗余)。

Python中匿名函数的定义格式:

核心特点:

  • 没有函数名,只能使用一次(通常配合其他函数使用,如map、filter等);

  • 表达式只能有一个,执行结果就是函数的返回值,无需写return;

  • 参数可以有多个,用逗号分隔,支持默认参数。

实操案例:匿名函数的常见用法

关键注意点:匿名函数仅适合简单逻辑,若函数体需要多行代码、条件判断(复杂if-else),建议使用普通def定义函数,保证代码可读性。
实操案例:返回多个值的函数

二、递归函数

递归函数,就是函数自己调用自己的函数,核心是将复杂问题拆解成与原问题相似的、更小的子问题,直到子问题可以直接解决(终止条件)。

递归的两个核心要素(缺一不可,否则会陷入无限递归,导致程序崩溃):

  1. 终止条件:递归停止的条件(当子问题无法再拆解时,返回具体值);

  2. 递归公式:将原问题拆解为子问题,用自身函数调用解决子问题。

适用场景:阶乘计算、斐波那契数列、树结构遍历(如二叉树遍历)、复杂嵌套数据的解析等。

实操案例:用递归函数计算阶乘
实操案例:用递归函数计算斐波那契数列(第n项)

关键注意点:

  • 必须设置明确的终止条件,否则会出现无限递归(RecursionError),导致程序崩溃;

  • 递归深度有限制:Python默认递归深度约为1000,若需处理更深的递归,需手动设置递归深度(不推荐,建议用循环替代);

  • 简单递归可能存在重复计算(如斐波那契数列),可通过缓存(如lru_cache装饰器)优化效率。

优化案例:用lru_cache装饰器优化斐波那契数列的重复计算

三、嵌套函数

嵌套函数,顾名思义,就是「在一个函数内部定义另一个函数」。外层的函数叫“外函数”,内层的叫“内函数”。

核心作用:隐藏内部逻辑(内函数只能在外函数内部调用,外部无法直接访问),让代码更模块化。

实操案例:嵌套函数实现“计算一个数的平方和立方”

关键注意点:

  • 内函数可以访问外函数的变量/参数,但不能直接修改(如果要修改,需要用nonlocal关键字声明);

  • 内函数只能在外函数内部调用,外部无法直接访问,保证了代码的安全性。

四、闭包

闭包是嵌套函数的一种特殊情况,满足3个条件(缺一不可):

  1. 存在嵌套函数(外函数和内函数);

  2. 内函数引用了外函数的非全局变量(外函数的参数或局部变量);

  3. 外函数的返回值是内函数本身(不是内函数的执行结果,而是内函数对象)。

闭包的核心价值:保留外函数的变量状态,即使外函数执行完毕,内函数依然能访问到外函数的变量。

实操案例:用闭包实现“计数器”

为什么要用闭包?

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

五、装饰器

装饰器是闭包的最常用场景,本质是「一个接收函数作为参数,并返回一个新函数的函数」。

核心作用:在不修改原函数代码、不改变原函数调用方式的前提下,给原函数增加额外功能(比如日志打印、计时、权限验证等)。

日常工作中,装饰器用得非常多,比如接口请求的权限校验、爬虫的反爬延迟、代码的执行耗时统计,都可以用装饰器实现。

5.1. 基础装饰器(无参数)

实操案例:用装饰器给函数增加“执行耗时统计”功能

理解要点:

  • @time_count 是装饰器的语法糖,简化了“func1 = time_count(func1)”的写法;

  • 装饰器的wrapper函数接收*args和**kwargs,是为了兼容不同参数个数、不同参数类型的原函数;

  • wrapper函数必须返回原函数的执行结果(result),否则原函数调用后会丢失返回值。

5.2. 带参数的装饰器(进阶,更灵活)

如果我们想给装饰器传递参数(比如控制日志的打印级别、控制耗时统计的保留小数位数),就需要在基础装饰器的外层,再套一个“参数函数”。

实操案例:带参数的装饰器,控制耗时统计的小数位数

5.3. 多个装饰器叠加(实战场景)

一个函数可以同时使用多个装饰器,执行顺序是「从下到上」(先执行下面的装饰器,再执行上面的装饰器)。

实操案例:给函数同时增加“日志打印”和“耗时统计”功能

六、总结

今天我们从基础到进阶,完整梳理了Python函数的核心知识点,总结一下重点:

  1. 基础函数:掌握定义、调用、参数(必传、默认、*args、**kwargs)、返回值,能独立编写简单函数;

  2. 匿名函数:用lambda定义,简洁高效,适合简单逻辑,常配合map、filter等函数使用;

  3. 递归函数:函数自我调用,需具备终止条件和递归公式,适合拆解复杂问题;

  4. 嵌套函数:函数内部套函数,隐藏内部逻辑,内函数可访问外函数参数;

  5. 闭包:满足3个条件,核心是“保留外函数变量状态”,面试常考;

  6. 装饰器:闭包的实战应用,不修改原函数,给函数增加额外功能,日常工作高频使用。

实操建议:

  1. 每个案例都复制到Python编辑器中运行,修改参数、调试代码,加深理解;

  2. 尝试自己写一个装饰器(比如“权限验证装饰器”),巩固进阶知识点;

  3. 函数的核心是“复用”和“模块化”,写代码时多思考:哪些逻辑可以封装成函数,减少重复代码。

如果想学习Python更多相关可以关注我,学习更多Python从零到精通等等。

后续会持续更新Python入门、进阶、实战内容,从基础语法到爬虫、数据分析、自动化办公,手把手带大家从新手成长为Python高手,记得关注不迷路哦~

往期更多精彩内容:
Python入门不踩坑|从语言优势到框架资源!一文读懂Python!
Python三大Web框架之Django,从零开始学
一文读懂Python:为什么它是2026年最值得学的编程语言?
【从零入门Python】一文带你了解Python九大核心模块
Python人工智能+机器人!从入门到精通
三大编程语言怎么选?学哪个?
超全Python实战案例!学完你的Python就牛了
130道Python习题!做完你的Python就牛了!

最新文章

随机文章