python的一般函数(python普通函数)
397人看过
Python的一般函数是构建程序逻辑的核心工具,其设计融合了灵活性、简洁性与功能性。作为动态语言,Python函数支持多种参数传递方式(位置参数、关键字参数、可变参数),并天然具备高阶特性,允许函数作为对象传递。其作用域规则采用LEGB分层模型,闭包机制使得函数可以携带执行环境,形成持久的数据封装。同时,Python通过lambda表达式、内置函数(如map/filter/sorted)及装饰器语法,进一步扩展了函数的能力边界。在性能层面,函数对象本身的开销较低,但嵌套层级过深或频繁调用可能影响执行效率,需结合生成器、缓存机制优化。

一、函数定义与基础结构
Python函数通过def关键字定义,支持默认参数值和可变参数类型。函数体缩进严格,返回值通过return语句控制,未显式返回时默认返回None。
| 特性 | 语法示例 | 说明 |
|---|---|---|
| 默认参数 | def func(a, b=0): | 参数b的默认值为0 |
| 可变位置参数 | def func(args): | 接收任意数量位置参数 |
| 关键字参数 | def func(kwargs): | 接收任意数量关键字参数 |
二、参数传递机制
Python采用“对象引用传递”模式,实参的本质是赋值给形参变量。不可变对象(如整数、字符串)在函数内修改不会影响外部,而可变对象(如列表、字典)的修改会直接反映到原始对象。
| 参数类型 | 传递方式 | 函数内修改影响 |
|---|---|---|
| 不可变对象(int, str) | 值传递(引用传递) | 不影响外部变量 |
| 可变对象(list, dict) | 引用传递 | 直接影响外部变量 |
| 函数对象 | 引用传递 | 可被重新绑定 |
三、作用域与闭包
Python采用LEGB(Local→Enclosed→Global→Built-in)作用域规则,闭包通过嵌套函数实现。非全局变量在函数内部修改需使用nonlocal声明,全局变量需用global声明。
| 作用域类型 | 访问限制 | 修改声明 |
|---|---|---|
| 局部作用域 | 仅函数内部可见 | 无特殊声明 |
| 嵌套作用域 | 外层函数可见 | nonlocal |
| 全局作用域 | 模块内可见 | global |
四、返回值与多值返回
Python函数可通过元组实现多值返回,本质仍是单一返回值。匿名函数(lambda)受限于单表达式,适合简单计算场景。
- 单返回值:直接
return value - 多返回值:
return a, b, c等价于返回元组(a, b, c) - lambda特性:仅支持单行表达式,如
lambda x: x+1
五、高阶函数与函数式编程
高阶函数指接受函数作为参数或返回函数的函数,典型应用包括map()、filter()、sorted()。自定义高阶函数可实现回调机制或策略模式。
| 高阶函数 | 功能描述 | 典型用法 |
|---|---|---|
map(func, iter) | 对迭代对象每个元素应用函数 | list(map(str.upper, ['a','b'])) |
filter(func, iter) | 筛选满足条件的元素 | list(filter(lambda x:x%2, [1,2,3])) |
sorted(iter, key=func) | 按自定义键排序 | sorted([3,1,2], key=lambda x: -x) |
六、内置函数与标准库函数
Python提供丰富的内置函数(如len()、sorted()),可直接调用无需导入模块。标准库函数(如os.path.join())需通过import引入,部分模块需单独加载。
| 函数类型 | 示例函数 | 使用条件 |
|---|---|---|
| 内置函数 | abs()、pow() | 直接调用,无需导入 |
| 标准库函数 | datetime.now() | 需import datetime |
| 第三方库函数 | requests.get() | 需pip install requests |
七、装饰器与函数增强
装饰器通过decorator语法修改函数行为,本质是函数嵌套。带参数装饰器需三层嵌套(外层接收参数,中层定义封装逻辑,内层应用装饰)。
- 无参数装饰器:直接包装原函数
- 带参数装饰器:如
repeat(3)需定义def repeat(n):嵌套装饰函数 - 类装饰器:通过
__call__方法实现,支持更复杂状态管理

函数调用存在轻微性能开销,高频调用场景建议使用轻量级函数或预计算。生成器函数通过yield实现惰性计算,可减少内存占用。
| 优化方向 | 技术手段 | 适用场景 |
|---|---|---|
| 减少函数调用 | 内联简单逻辑 | 高频微调用场景 |
128人看过
410人看过
381人看过
52人看过
321人看过
346人看过





