十个python高级代码片段(Ⅰ)

1. 生成器表达式与内存优化

import sys

# 使用生成器表达式计算一个大列表的平方和,避免了创建完整的列表,从而节省内存
squares_sum = sum(x*x for x in range(10**6))
print(f"内存使用: {sys.getsizeof(squares_sum)} 字节")

说明: 生成器表达式可以在迭代中逐个生成结果,而不是一次性创建整个列表,减少内存占用。

2. 装饰器模式

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("开始执行函数")
        result = func(*args, **kwargs)
        print("函数执行结束")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    return f"Hello, {name}"

print(say_hello("Alice"))

说明: 装饰器允许在函数执行前后添加行为而不修改原始函数的代码,是一种面向切面编程的实现方式。

3. 上下文管理器

class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
    
    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

with FileManager('example.txt', 'w') as f:
    f.write('Hello, world!')

说明: 自定义上下文管理器用于确保文件在打开后能正确关闭,避免资源泄露。

4. 元类编程

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f"Creating class {name}")
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass

 说明: 元类控制类的创建过程,可以在类创建时动态修改类的行为。

5. 多线程

import threading

def print_numbers():
    for i in range(5):
        print(i)

thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()

说明: 多线程可以在不阻塞主线程的情况下执行并行任务,适用于I/O密集型任务。

6. 协程与异步IO

import asyncio

async def main():
    print('Hello')
    await asyncio.sleep(1)
    print('World')

asyncio.run(main())

说明: 使用asyncio库来处理异步I/O操作,协程通过await挂起执行,直到结果准备好,从而高效利用资源。

7. 函数内存缓存

from functools import lru_cache

@lru_cache(maxsize=32)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

print(fib(10))

说明: 使用lru_cache装饰器为递归函数提供缓存机制,从而大幅提升性能。

8. 上下文表达式

with open('example.txt', 'w') as f, open('log.txt', 'w') as log:
    f.write('Hello, world!')
    log.write('File has been written')

说明: 多个上下文管理器可以使用逗号分隔在一个with语句中使用,简化代码结构。

9. 生成器函数

def countdown(n):
    print("Starting countdown")
    while n > 0:
        yield n
        n -= 1

for i in countdown(5):
    print(i)

说明: 生成器函数通过yield提供一种延迟生成值的方式,适用于处理大数据或无限序列。

10. 链式函数调用

class Calculator:
    def __init__(self, value=0):
        self.value = value
    
    def add(self, x):
        self.value += x
        return self
    
    def subtract(self, x):
        self.value -= x
        return self

result = Calculator().add(5).subtract(3).value
print(result)

说明: 链式调用允许在同一个对象上连续调用多个方法,简化代码结构并提高可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值