Python 高级特性(一):让你的代码更优雅、高效

206 阅读2分钟

深入探讨 Python 高级特性:让你的代码更高效、更优雅

1. 装饰器(Decorator)

装饰器是 Python 中一个非常强大的特性。它允许你在不改变原函数代码的情况下,给函数添加额外的功能。它使用 @ 符号来修饰函数,并在函数执行前后执行额外的代码。装饰器的本质是一个返回函数的函数。

示例:

def decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling function: {func.__name__}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} returned: {result}")
    return wrapper

@decorator
def say_hello():
    print("Hello!")

say_hello()

输出:

Calling function: say_hello
Hello!
Function say_hello returned: None

2. 生成器

生成器是一种特殊的函数,它可以按需生成一系列值,而不是一次性将所有值都存储在内存中。这在处理大型数据集或需要节省内存时非常有用。生成器的优势在于它们是“懒加载”的,意味着只有在需要时才会生成下一项数据,而不会一次性加载所有数据到内存中。

示例:

def count_up_to(max):
    count = 1
    while count <= max:
        yield count
        count += 1

gen = count_up_to(5)
print(gen)
for num in gen:
    print(num)

输出:

<generator object count_up_to at 0x00000193DDA705F0>
1
2
3
4
5

3. 迭代器 (Iterator)

迭代器是一种可以遍历序列的对象。它使用 __iter____next__ 方法来实现迭代功能。

示例:

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < len(self.data):
            value = self.data[self.index]
            self.index += 1
            return value
        else:
            raise StopIteration

my_iterator = MyIterator([1, 2, 3])
for item in my_iterator:
    print(item)

输出:

1
2
3

4. 上下文管理器(Context Manager)

上下文管理器主要用于管理资源,如文件操作、数据库连接等。它通过 with 语句来确保在使用资源后能够自动清理,避免资源泄露。可以使用 __enter____exit__ 方法来定义自己的上下文管理器。

示例:

class FileOpener:
    def __init__(self, filename):
        self.filename = filename

    def __enter__(self):
        self.file = open(self.filename, 'r')
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        if self.file:
            self.file.close()

with FileOpener('test.txt') as f:
    content = f.read()
    print(content)

输出:

Entering context
abc
Exiting context

5. 类型提示与类型检查

虽然 Python 是动态类型语言,但从 Python 3.5 开始,加入了类型提示(Type Hinting)功能,允许你为函数和变量指定类型。这有助于提高代码的可读性和可维护性,并能通过静态类型检查工具(如 mypy)提前发现潜在的类型错误。

示例:

def add(a: int, b: int) -> int:
    return a + b