Python编程:递归、函数式风格与序列操作详解
立即解锁
发布时间: 2025-08-29 10:27:49 阅读量: 8 订阅数: 17 AIGC 

# Python编程:递归、函数式风格与序列操作详解
## 1. 递归函数
递归函数是一种直接或间接调用自身的函数。以阶乘函数为例:
```python
def factorial(number):
if number <= 1:
return 1
else:
return number * factorial(number - 1)
# 调用阶乘函数
for i in range(11):
print(f'{i}的阶乘是: {factorial(i)}')
```
递归函数有直接递归和间接递归之分:
- **直接递归**:函数直接调用自身。
- **间接递归**:函数调用另一个函数,而另一个函数又回调该函数。例如,函数A调用函数B,函数B又调用函数A。
递归调用可能会导致栈溢出错误,通常是因为无限递归,即遗漏了基本情况或递归步骤编写错误,无法收敛到基本情况。
## 2. 函数式风格编程
Python并非纯粹的函数式编程语言,但提供了“函数式风格”的特性,有助于编写更简洁、易读、易调试和修改的代码,还便于并行化以提高多核处理器的性能。以下是Python函数式编程的关键能力:
| 功能 | 说明 |
| ---- | ---- |
| 避免副作用 | 函数不修改外部状态 |
| 闭包 | 函数可以访问其外部作用域的变量 |
| 声明式编程 | 关注做什么而非怎么做 |
| 装饰器 | 用于修改函数或类的行为 |
| 字典推导式 | 快速创建字典 |
| filter/map/reduce | 对序列进行过滤、映射和归约操作 |
| functools模块 | 提供高阶函数和可调用对象的工具 |
| 生成器表达式 | 按需生成值 |
| 生成器函数 | 使用yield关键字生成迭代器 |
| 高阶函数 | 接受函数作为参数或返回函数 |
| 不可变性 | 避免修改变量值 |
| 内部迭代 | 隐藏迭代细节 |
| 迭代器 | 实现迭代协议的对象 |
| itertools模块 | 提供高效的迭代器工具 |
| lambda表达式 | 匿名函数 |
| 惰性求值 | 延迟计算 |
| 列表推导式 | 快速创建列表 |
| operator模块 | 提供操作符的函数形式 |
| 纯函数 | 结果仅依赖于输入参数,无副作用 |
| range函数 | 生成整数序列 |
| 归约操作 | 对序列进行归约计算 |
| 集合推导式 | 快速创建集合 |
### 2.1 声明式编程与内部迭代
传统的外部迭代需要指定控制变量、初始值、增量和循环条件,容易出错且会修改变量值。而Python的`for`语句和`range`函数采用内部迭代,隐藏了迭代细节,只需指定要生成的值和接收值的变量。例如:
```python
grades = [85, 90, 78, 92, 88]
total = sum(grades)
print(f'成绩总和: {total}')
```
这种方式体现了声明式编程的思想,只需声明要做什么,而无需编写具体的实现步骤。
### 2.2 纯函数
纯函数的结果仅依赖于输入参数,且每次调用相同参数都会返回相同结果,同时不会产生副作用。例如,内置函数`sum`就是一个纯函数:
```python
values = [1, 2, 3]
print(sum(values)) # 输出: 6
print(sum(values)) # 再次调用,输出仍为: 6
```
调用`sum`函数不会修改传入的列表。
## 3. 数据科学:离散程度度量
在描述性统计中,除了集中趋势度量(均值、中位数和众数),还需要了解数据的离散程度。常见的离散程度度量指标有方差和标准差。
### 3.1 方差
以10次六面骰子掷出的结果`[1, 3, 4, 2, 6, 5, 3, 4, 5, 2]`为例,计算方差的步骤如下:
1. 计算均值:`(1 + 3 + 4 + 2 + 6 + 5 + 3 + 4 + 5 + 2) / 10 = 3.5`
2. 计算每个值与均值的差值:`[-2.5, -0.5, 0.5, -1.5, 2.5, 1.5, -0.5, 0.5, 1.5, -1.5]`
3. 对差值进行平方:`[6.25, 0.25, 0.25, 2.25, 6.25, 2.25, 0.25, 0.25, 2.25, 2.25]`
4. 计算平方值的均值:`(6.25 + 0.25 + 0.25 + 2.25 + 6.25 + 2.25 + 0.25 + 0.25 + 2.25 + 2.25) / 10 = 2.25`
使用`statistics`模块的`pvariance`函数验证:
```python
import statistics
data = [1, 3, 4, 2, 6, 5, 3, 4, 5, 2]
variance = statistics.pvariance(data)
print(f'方差: {variance}')
```
### 3.2 标准差
标准差是方差的平方根,它能减轻异常值的影响。标准差越小,数据越接近均值,离散程度越小。使用`statistics`模块的`pstdev`函数计算标准差:
```python
std_dev = statistics.pstdev(data)
print(f'标准差: {std_dev}')
```
也可以通过`math.sqrt`函数验证:
```python
import math
std_dev_verify = math.sqrt(statistics.pvariance(data))
print(f'验证标准差: {std_dev_verify}')
```
### 3.3 标准差与方差的优势
标准差的单位与原始数据相同,而方差的单位是原始数据单位的平方。例如,记录的温度数据单位是摄氏度,方差的单位是摄氏度的平方,而标准差的单位仍是摄氏度。
## 4. 序列:列表和元组
### 4.1 列表
列表是Python中常用的序列类型,可存储相同或不同类型的元素,并且可以动态调整大小。
#### 4.1.1 创建列表
列表可以存储同质数据,也可以存储异质数据。例如:
```python
# 存储同质数据
c = [-45, 6, 0, 72, 1543]
print(c)
# 存储异质数据
student = ['Mary',
```
0
0
复制全文
相关推荐










