You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.6KB

  1. """
  2. 1. 偏函数
  3. 偏函数partial是functools 模块里提供的一个函数。和装饰器对比来理解,装饰器改变了一个函数的行为,
  4. 而偏函数不能改变一个函数的行为。偏函数只能根据已有的函数生成一个新的函数,这个新的函数完成已有函数相同的功能,
  5. 但是,这个新的函数的部分参数已被偏函数确定下来
  6. 2. 场景示例
  7. 2.1 常规实现
  8. 为了便于理解,我们构造一个使用场景,假设我们的程序要在dest目录下新建一些文件夹,那么常见的实现功能代码如下
  9. import os
  10. from os import mkdir
  11. mkdir(os.path.join('./dest', 'dir1'))
  12. mkdir(os.path.join('./dest', 'dir2'))
  13. mkdir(os.path.join('./dest', 'dir3'))
  14. 功能很简单,代码很简洁,但是有个小小的不如意之处,每次都是在dest目录下新建文件夹,既然它这么固定,是不是可以不用传递dest参数呢?
  15. 2.2 偏函数实现
  16. import os
  17. from os import mkdir
  18. from functools import partial
  19. dest_join = partial(os.path.join, './dest')
  20. mkdir(dest_join('dir1'))
  21. mkdir(dest_join('dir2'))
  22. mkdir(dest_join('dir3'))
  23. dest_join是partial创建出来的一个新的函数,这个函数在执行时会调用os.path.join并将'./dest'作为参数传给join
  24. 偏函数将预先确定的参数冻结,起到了缓存的作用,在获得了剩余的参数后,连同之前冻结的确定参数一同传给最终的处理函数。
  25. 虽然看起来代码没有减少,但如果你实际使用就会发现,用了偏函数,免去了反复输入相同参数的麻烦,尤其当这些参数很多很难记忆时
  26. """