functools

reduce方法:
    reduce方法,顾名思义就是减少
    reduce(function,sequence[,initial]=>value)
    可迭代对象不能为空;初始值没提供就在可迭代对象中取一个元素

from functools import reduce
nums = [6,9,4,2,4,10,5,9,6,9]
print(nums)
[6, 9, 4, 2, 4, 10, 5, 9, 6, 9]
print(sum(nums))
64
print(reduce(lambda val,x:val + x,nums))
64
print(reduce(lambda val,x:val - x,nums))
-52

partial方法:
    偏函数,把函数部分的参数固定下来,相当于为部分的参数添加了一个固定的默认值,形成一个新的函数并返回
    从partial生成的新函数,是对原函数的封装

print(newadd(7))
12
print(newadd(7,y = 6))
13
print(newadd(y=10,x = 6))
16import inspect
print(inspect.signature(newadd))
(x, *, y=5) -> int  #被偏函数定义后,形参将变为keyword-only
import functoolsdef add(x,y,*args,**kwargs) -> int:print(args)return x + y
newadd = functools.partial(add,1,3,6,5)
print(newadd(7))
(6, 5, 7)
4print(newadd(7,10))
(6, 5, 7, 10)
4
#print(newadd(7,8,y = 20,x = 26)) #不可以这样定义
print(newadd())
(6, 5)
4import inspect
print(inspect.signature(newadd))
(*args, **kwargs) -> int
def partial(func,*args,**keywords):def newfunc(*fargs,**fkeywords):newkeywords = keywords.copy()newkeywords.update(fkeywords)return func(*(args+fargs),**newkeywords)newfunc.func = funcnewfunc.args = argsnewfunc.keywords = keywordsreturn newfuncdef add(x,y):return x + y
foo = partial(add,4)
foo(5)
9

@functools.lru_cache(maxsize=128,typed=False):
    Least-recently-used装饰器。lru,最近最少使用。cache缓存
    如果maxsize设置为None,则禁用LRU功能,并且缓存可以无限制增长。当maxsize是二的幂时,LRU功能执行得最好
    如果typed设置为True,则不同类型的函数参数将单独缓存。例如,f(3)和f(3.0)将视为具有不同结果的不同调用

import functools
import time
@functools.lru_cache()
def add(x,y,z=3):time.sleep(z)return x + yadd(4,5)
9
add(4.0,5)
9
add(4,6)
10
add(4,6,3)
10
add(6,4)
10
add(4,y=6)
10
add(y=6,x=4)
10

lru_cache装饰器:

functools._make_key((4,6,3),{},False)
[4, 6, 3]通过一个字典缓存被装饰函数的调用和返回值functools._make_key((4,6,3),{},False)
[4, 6, 3]functools._make_key(tuple(),{'z':3,'x':4,'y':6},False)
[<object at 0x7ff7d24010b0>, 'z', 3, 'x', 4, 'y', 6]functools._make_key((),{'z':3,'x':4,'y':6},False)
[<object at 0x7ff7d24010b0>, 'z', 3, 'x', 4, 'y', 6]functools._make_key((),{'z':3,'x':4,'y':6},True)
[<object at 0x7ff7d24010b0>, 'z', 3, 'x', 4, 'y', 6, int, int, int]

lru_cache装饰器:
    斐波那契数列递归方法的改造

import functools
@functools.lru_cache() #maxsize=None
def fib(n):return 1 if n< 3 else fib(n-1) + fib(n-2)print([fib(i+1) for i in range(35)])
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465]

lru_cache装饰器应用:
    使用前提:
        同样的函数参数一定得到同样的结果
        函数执行时间很长,且要多次执行
        本质是函数调用的参数=》返回值
    缺点 :
        不支持缓存过期,key无法过期、失效
        不支持清楚操作
        不支持分布式,是一个单机的缓存
适用场景,单机上需要空间换时间的地方,可以用缓存来将计算变成快速的查询

Python之functools模块使用方法相关推荐

  1. python导入自定义模块_ubuntu下Python导入自定义模块的方法

    ubuntu下Python导入自定义模块的方法 当在python程序中导入自定义模块时,若出现"Import Error:no module named xxx"表明系统在pyth ...

  2. 【转】关于python中re模块split方法的使用

    注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...

  3. Python的functools模块

    Python的functools模块 functools 模块可以说主要是为函数式编程而设计,用于增强函数功能. functools模块用以为可调用对象(callable objects)定义高阶函数 ...

  4. Python中functools模块函数解析

    Python自带的 functools 模块提供了一些常用的高阶函数,也就是用于处理其它函数的特殊函数.换言之,就是能使用该模块对可调用对象进行处理. functools模块函数概览 functool ...

  5. python 之 functools模块

    functools模块用于高阶函数:作用于或返回其他函数的函数.一般而言,任何可调用对象都可以作为本模块用途的函数来处理. 官方文档已经有了详尽的介绍,这里就不在复述,详情请见:官方文档 .这里主要介 ...

  6. 查看 Python 已安装模块的方法

    目录 前言 1 方法列举 2 方法演示 2.1. 方法一演示 2.2. 方法二演示 2.3. 方法三演示 总结 前言 提示:这里可以添加本文要记录的大概内容: 本文介绍几种查看 Python 已安装模 ...

  7. python 如何查看模块所有方法-Python查看模块函数,查看函数方法的详细信息

    Python查看方法的详情 1.通用的帮助函数help() 使用help()函数来查看函数的帮助信息. 如: 1 importrequests2 3 help(requests) 会有类似如下输出: ...

  8. python 如何查看模块所有方法-如何查看python的模块

    python的一个优势是有着大量自带和在线的模块(module)资源,可以提供丰富的功能,在使用这些模块的时候,如果每次都去网站找在线文档会过于耗费时间,结果也不一定准确.因此这里介绍下python自 ...

  9. python 如何查看模块所有方法-Python 查看模块的帮助文档,方法和帮助信息

    参考链接:https://blog.csdn.net/u013810296/article/details/55509284 这里介绍下python自带的查看帮助功能,可以在编程时不中断地迅速找到所需 ...

最新文章

  1. 各种 django 静态文件的配置总结【待续】
  2. 浅谈错排公式的推导及应用
  3. Xtract 实现 VMware Vsphere 迁主机到 Nutanix cluster
  4. 使用 SAP UI5 系统测试工具 UIVeri5 的一个具体例子
  5. 【No.1 Ionic】基础环境配置
  6. java终结方法_Java终结任务:Callable和Future
  7. CSS3 3D transform变换
  8. 完美运营牛帮任务平台源码 仿悬赏猫支持封装APP
  9. linux shell 获取用户名,shell脚本输出/etc/passwd中shell类型对应的用户名及其个数
  10. 推荐 | 自然语言处理、计算机视觉等机器学习实战项目练手平台
  11. java 去停用词_利用jieba分词并去除停用词
  12. 增强火山图,试一下?
  13. Vue番外之循环数组从指定下标开始
  14. Python中列表的常用方法总结
  15. Android手机开发者模式
  16. stata01 - stata基础
  17. Redis持久化——AOF机制详解
  18. 自媒体多账号发布工具大全,快来看看
  19. Linux好书、经典书籍推荐
  20. 实用国际(XX)计量单位表

热门文章

  1. 淘宝运营 从提升质量得分、巧妙设置推广计划、提高账户权重来降低直通车ppc
  2. 使用 github 仓库搭建 Hexo教程,Hexo配置文件解读,Hexo安装next主题及主题配置,美化
  3. Python |(爬虫 )爬取当当网书籍信息存到Excel中
  4. vue实现微信分享遮罩层禁止点击禁止滚动
  5. URL指向文件不存在
  6. 简易仿iOS辅助触控
  7. 一个老程序员的心里话
  8. Google IO 16 / Mobile Web 笔记
  9. Activit 流程撤回功能
  10. 从“边界信任”到“零信任”,安全访问的“决胜局”正提前上演