14. 迭代器和迭代协议
在Python中,迭代器是支持迭代操作的对象,即它们可以一次返回其成员中的一个。任何实现了 __iter__()
和 __next__()
方法的对象都是迭代器。
class Count:
def __init__(self, low, high):
self.current = low
self.high = high
def __iter__(self):
return self
def __next__(self):
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
# 使用迭代器
for number in Count(1, 5):
print(number)
15. 生成器
生成器是一种特殊的迭代器,可以更方便地使用简单的函数来创建。通过使用关键字 yield
,函数在每次生成值时将挂起其状态。
def countdown(n):
while n > 0:
yield n
n -= 1
# 使用生成器
for i in countdown(5):
print(i)
16. 装饰器的进阶用法
装饰器可以用来修改其他函数的行为,而且可以堆叠、参数化。
def decorator_with_args(number):
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Something is happening before the function is called.")
result = func(*args, **kwargs)
print("Something is happening after the function is called.")
return result * number
return wrapper
return my_decorator
@decorator_with_args(3)
def add(x, y):
return x + y
print(add(2, 3))
17. 异步编程(asyncio
)
Python的 asyncio
模块用于编写单线程并发代码使用协程,适用于IO密集型应用。
import asyncio
async def main():
print('Hello')
await asyncio.sleep(1)
print('world')
asyncio.run(main())
18. 类型注解
Python从3.5版本开始引入了类型提示(type hints),用于指示变量和函数参数、返回值的类型,有助于代码的可读性和可维护性。
from typing import List, Dict
def greet_all(names: List[str]) -> None:
for name in names:
print(f"Hello, {name}")
greet_all(["Alice", "Bob", "Charlie"])
19. 元编程
元编程是指在运行时创建或自定义代码的技术。Python提供了多种元编程工具,包括元类和装饰器。
元类(Metaclasses)
元类是创建类的类,它们允许你拦截Python的类构造过程。通过定义一个元类,你可以修改类的定义。
class Meta(type):
def __new__(cls, name, bases, class_dict):
print("A class is defined with name:", name)
return type.__new__(cls, name, bases, class_dict)
class MyClass(metaclass=Meta):
pass
# 输出: A class is defined with name: MyClass
20. 动态属性和方法
Python支持在运行时动态地添加或修改对象和类的属性和方法,这增加了代码的灵活性。
class DynamicClass:
pass
# 动态添加属性
obj = DynamicClass()
obj.new_attr = "Hello"
print(obj.new_attr)
# 动态添加方法
import types
def dynamic_method(self):
return "Dynamic Method Called"
obj.dynamic_method = types.MethodType(dynamic_method, obj)
print(obj.dynamic_method())
21. 上下文管理器的高级用法
除了基本的 with
语句用法外,你可以创建支持复杂逻辑的自定义上下文管理器。
class ManagedResource:
def __enter__(self):
print("Enter resource")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Exit resource")
if exc_type:
print(f"An error occurred: {exc_val}")
return True # Suppress exceptions
with ManagedResource():
raise Exception("Something went wrong!")
# Enter resource
# Exit resource
# An error occurred: Something went wrong!
22. 多进程与多线程
Python支持多线程和多进程编程,这对于提高IO密集型和计算密集型应用的性能非常重要。
多进程
from multiprocessing import Process
def print_func(continent='Asia'):
print('The name of continent is : ', continent)
if __name__ == "__main__": # Required for Windows
names = ['America', 'Europe', 'Africa']
procs = []
proc = Process(target=print_func) # Create a Process
procs.append(proc)
proc.start()
# Create a process for each name
for name in names:
proc = Process(target=print_func, args=(name,))
procs.append(proc)
proc.start()
# Complete the processes
for proc in procs:
proc.join()
多线程
import threading
def print_cube(num):
print("Cube: {}".format(num * num * num))
def print_square(num):
print("Square: {}".format(num * num))
if __name__ == "__main__":
t1 = threading.Thread(target=print_square, args=(10,))
t2 = threading.Thread(target=print_cube, args=(10,))
t1.start()
t2.start()
t1.join()
t2.join()