经典题型04

面向对象与高级特性

1. 定义类方法(实例方法)实现求和

class Calculator:
    def __init__(self, num1, num2):
        # 初始化实例属性
        self.num1 = num1
        self.num2 = num2

    def add(self):
        # 实例方法求和
        return self.num1 + self.num2

# 使用示例
calc = Calculator(5, 7)
print(calc.add())  # 输出:12

 

2. 单例模式实现

class Singleton:
    _instance = None  # 类属性保存唯一实例

    def __new__(cls, *args, **kwargs):
        # 控制实例化过程
        if not cls._instance:
            # 创建新实例并初始化
            cls._instance = super().__new__(cls)
            cls._instance.init_settings(*args, **kwargs)
        return cls._instance

    def init_settings(self, value=None):
        # 初始化方法(只执行一次)
        self.value = value

# 使用示例
s1 = Singleton(value=100)
s2 = Singleton(value=200)

print(s1 is s2)        # 输出:True(是同一个实例)
print(s1.value)        # 输出:100(后续初始化不会覆盖值)
print(s2.value)        # 输出:100

关键点说明:

  1. 类与对象示例

    • 使用 __init__ 初始化实例属性

    • 通过实例方法 add() 实现求和功能

    • 需要先创建实例再调用方法

  2. 单例模式实现

    • 通过重写 __new__ 方法控制实例创建

    • 使用类属性 _instance 存储唯一实例

    • 添加 init_settings() 方法实现安全初始化

    • 所有实例共享相同的对象ID

    • 后续实例化不会覆盖已存在的属性值

 

3. Lambda匿名函数

# 基础语法:lambda 参数: 表达式
square = lambda x: x**2  # 平方函数
cube = lambda x: x**3    # 立方函数

print(square(5))  # 输出 25
print(cube(3))    # 输出 27

# 直接结合使用(无需定义变量)
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared)  # 输出 [1, 4, 9, 16]

 

4.高阶函数应用

map() - 数据转换

# 将字符串列表转为大写
words = ["hello", "world", "python"]
upper_words = list(map(str.upper, words))
print(upper_words)  # 输出 ['HELLO', 'WORLD', 'PYTHON']

# 结合lambda计算字符长度
lengths = list(map(lambda s: len(s), words))
print(lengths)  # 输出 [5, 5, 6]

filter() - 数据筛选

# 过滤偶数
numbers = [12, 7, 24, 5, 19]
even_numbers = list(filter(lambda x: x%2 == 0, numbers))
print(even_numbers)  # 输出 [12, 24]

# 筛选包含字母"o"的单词
words = ["apple", "orange", "banana", "kiwi"]
filtered = list(filter(lambda s: 'o' in s, words))
print(filtered)  # 输出 ['orange']

reduce() - 数据聚合

from functools import reduce

# 计算累加和
numbers = [1, 2, 3, 4, 5]
sum_result = reduce(lambda a,b: a + b, numbers)
print(sum_result)  # 输出 15

# 计算阶乘(5! = 120)
factorial = reduce(lambda a,b: a * b, range(1,6))
print(factorial)  # 输出 120

 

5.关键特性说明:

功能特点典型场景
Lambda函数- 单行匿名函数
- 不能包含复杂逻辑
- 自动返回表达式结果
临时简单操作
回调函数参数
map()- 返回迭代器
- 对每个元素执行相同操作
- 输入输出长度相同
数据格式转换
批量计算
filter()- 返回迭代器
- 输出长度 ≤ 输入长度
- 根据布尔条件过滤元素
数据清洗
条件筛选
reduce()- 需要导入functools
- 逐步累积计算结果
- 最终返回单个聚合值
求和/求积
统计聚合操作

 

6. 最佳实践建议:

优先使用内置函数

# 比lambda更高效的写法
sum_result = sum(numbers)  # 替代reduce加法
filtered = [x for x in numbers if x%2==0]  # 列表推导式替代filter

避免过度嵌套

# 不推荐的写法
result = reduce(lambda x,y: x+y, 
               filter(lambda x: x>10, 
                     map(lambda x: x*2, numbers)))

# 推荐的清晰写法
doubled = [x*2 for x in numbers]
filtered = [x for x in doubled if x>10]
result = sum(filtered)
  1. 函数式编程适用场景

  • 数据管道处理(ETL)
  • 流式数据处理
  • 需要高度声明式代码的场合

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值