1、示例一
需求:写一个装饰器,对函数的部分或者全部参数做类型检查。
使用inspect库实现函数参数的类型检查(对类的变量进行类型检查使用描述器):
2、示例二
需求:自己实现partial函数。
3、示例三
需求:写一个函数,判断两个字典是否相等,字典的value可能为数字、字符串、元组、列表、集合和字典。如果value为列表和字典,需要判断其中每个元素是否相等。
4、示例四
需求:模拟一个数据源不断产生数值,求一段时间内,最大的K个元素。
生成数据源:
datetime库的用法:
(1)求Top K方法一:数据先逐个加入列表,再在列表中排序
(2)求Top K方法二:有序插入列表
(3)求Top K方法三:大顶堆
大顶堆的实现:
add()和父节点比较大小,如果比父节点大,则交换;
pop()和两个子节点比较大小,如果比子节点小,则和较大的子节点交换。
调用大顶堆的Top K的实现:
5、示例五
需求:自学标准库re。
re是一个在Python中使用正则表达式的标准库。
6、示例六
需求:实现os.walk方法。
os.scandir函数:
深度优先遍历非递归方式实现os.walk方法:
深度优先遍历递归方式实现os.walk方法:
广度优先遍历非递归方式实现os.walk方法:
os.walk方法的使用:
7、示例七
需求:实现一个优先队列,由用户指定比较函数。
namedtuple模块的用法:
类比堆的方式实现优先队列:
8、示例八
需求:实现tail -f的功能。
9、示例九
需求:实现tail命令,包括-n和-f选项,可以使用argparse实现命令行参数解析。
10、示例十
需求:学习单例设计模式,并使用装饰器实现单例类。
11、示例十一
需求:不使用内置数据结构,实现栈、队列和列表。
实现栈方式一:
实现栈方式二:
12、 示例十二
需求:实现staticmethod装饰器。
13、示例十三
需求:假设已经存在函数get_permissions可以获取当前用户的权限列表,设计一个权限管理类,既可以作为装饰器,对一个函数授权,也可以作为上下文管理,对一段代码授权。例如:
permissions = get_permissions()
if 'admin' in permissions:
## do somethings
else:
raise Exception('Permissions denied')
14、示例十四
需求:实现contextlib.contextmanager装饰器。