深入探讨 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