函数和模块
函数和模块
函数:高质量代码的基石
在 Python 中,函数(function)是将一段完成特定功能的代码封装起来,并通过名称重复调用的结构。就像数学中的函数 f(x) = x² 一样,Python 中的函数接收输入(参数),经过处理后输出结果(返回值)。函数的核心价值在于:
- 消除重复代码
- 提高可维护性
- 增强模块化与复用性
应用场景与实际案例
✅ 场景1:重复运算抽象(如阶乘、组合数)
def fac(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
重构阶乘函数后计算组合数变得更简洁:
print(fac(7) // fac(3) // fac(4)) # 输出 35
最佳实践:将复杂或重复计算抽象成函数,提升可读性与复用性。
定义函数的语法
def function_name(parameters):
"""函数说明文档"""
# 代码块
return result
def是定义函数的关键字function_name是函数名parameters是参数列表(可以为空)return返回函数处理结果
函数的参数类型
1. 位置参数(按顺序传值)
def greet(name, age):
print(f"Hello {name}, you are {age} years old.")
greet("Alice", 30)
2. 关键字参数(使用键=值形式)
greet(age=25, name="Bob")
3. 默认参数
def greet(name, age=18):
print(f"Hello {name}, age: {age}")
greet("Carol") # 使用默认值18
✅ 注意:默认参数必须在非默认参数之后定义。
4. *可变参数(args)**
def add(*args):
return sum(args)
print(add(1, 2, 3)) # 6
5. **关键字可变参数(kwargs)
def print_info(**kwargs):
for k, v in kwargs.items():
print(f"{k} = {v}")
print_info(name="Alice", age=30)
特殊参数语法
- 强制位置参数(Python 3.8+)
def foo(a, b, /): # 只能用 foo(1, 2),不能 foo(a=1, b=2)
- 命名关键字参数
def foo(*, a, b): # 必须用 foo(a=1, b=2)
模块:组织函数的容器
在实际开发中,程序被拆分成多个 .py 文件,每个文件就是一个模块(module)。模块有助于:
- 避免命名冲突
- 复用与共享功能
- 管理大型项目
模块使用方法
# module1.py
def greet():
print("Hello from module1")
# test.py
import module1
module1.greet()
使用别名(as)
import module1 as m1
m1.greet()
从模块中导入函数
from module1 import greet
greet()
避免冲突:函数重命名
from module1 import greet as greet1
from module2 import greet as greet2
greet1()
greet2()
标准库模块的使用
Python 内建了大量功能强大的模块。例如:
math:数学函数
import math
print(math.factorial(5)) # 120
random:生成随机数
from random import randint
print(randint(1, 6)) # 摇骰子
time:时间操作
import time
print(time.time()) # 当前时间戳
内置函数:无需导入即可用
Python 提供的常用 内置函数 包括:
| 函数 | 功能描述 |
|---|---|
abs(x) |
求绝对值 |
len(s) |
获取长度 |
max(), min() |
最大最小值 |
sum() |
求和 |
input() |
用户输入 |
print() |
输出 |
type() |
类型判断 |
range() |
生成范围整数序列 |
round(x, d) |
四舍五入到d位小数 |
实战:设计可复用模块
假设我们要设计一个“几何工具模块”,可以将常用函数封装在一个模块中:
geometry.py
def is_triangle(a, b, c):
return a + b > c and a + c > b and b + c > a
def triangle_area(a, b, c):
if not is_triangle(a, b, c):
return None
s = (a + b + c) / 2
return (s*(s - a)*(s - b)*(s - c)) ** 0.5
使用:
from geometry import triangle_area
print(triangle_area(3, 4, 5)) # 6.0
最佳实践总结
✅ 函数设计原则:
- 每个函数只做一件事
- 函数命名语义清晰(动词+名词组合)
- 尽量使用默认参数、可变参数提升灵活性
- 编写函数说明文档(docstring)
✅ 模块组织建议:
- 每个模块聚焦一个主题或功能
- 命名与模块内容一致(如
math_utils.py) - 使用
import/from...import统一管理依赖
总结:函数与模块的威力
| 特性 | 函数 | 模块 |
|---|---|---|
| 作用 | 封装逻辑、避免重复 | 封装文件、组织函数与类 |
| 调用方式 | func() |
module.func() |
| 共享与复用 | 通过参数复用逻辑 | 通过 import 重用结构 |
| 开发目标 | 高内聚、低耦合、可测试 | 可维护、可分工、可扩展 |
函数让代码更整洁,模块让项目更清晰。函数是程序的基本单元,模块是程序的结构支柱。
学好函数与模块,等于掌握了编写结构化、高复用、高质量 Python 程序的核心能力!