金沙检测线路js它所有的参数都与原来的相同

当前位置:金沙检测线路411166 > 金沙检测线路js > 金沙检测线路js它所有的参数都与原来的相同
作者: 金沙检测线路411166|来源: http://www.kemates.com|栏目:金沙检测线路js

文章关键词:金沙检测线路411166,完全解析函数

  functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们。

  partial 类是 functools 模块提供的主要工具, 它可以用来“包装”一个可调用的对象的默认参数。它产生的对象本身是可调用的,可以看作是原生函数。它所有的参数都与原来的相同,并且可以使用额外的位置参数或命名参数来调用。使用 partial 代替 lambda 来为函数提供默认参数,同时保留那些未指定的参数。

  示例中最后调用第一个 partial 对象而没有传递 a 的值,导致异常。

  method1() 可以被 MyClass 实例调用,和普通类方法一样,实例作为第一个参数传入。method2() 没有被成功绑定为类方法。因此其 self 参数必须显式传入,所以此例抛出 TypeError 异常:

  使用装饰器时保持函数的属性信息有时非常有用。但是使用装饰器时难免会损失一些原本的功能信息。所以functools提供了 wraps() 装饰器可以通过 update_wrapper() 将原函数对象的指定属性复制给包装函数对象。

  富比较API旨在允许具有复杂比较的类以最有效的方式实现每种计算。但是,对于比较相对简单的类,手动创建每种富比较方法没有意义。total_ordering() 类装饰器可以使被装饰的类只需要定义 __lt__(),__le__().__gt__()和__ge__() 中的其中一个和 __eq__(), 剩下的由该装饰器自动提供。这简化了定义所有富比较操作的工作量。

  虽然该装饰器能很容易的创建完全有序类型,但衍生出的比较函数执行的可能会更慢,以及产生更复杂的堆栈跟踪。如果性能基准测试表明这是程序的瓶颈,则实现所有六个富比较函数可能会提高速度。

  例如给定一个正整数列表,输出用这些正整数能够拼接成的最大整数。如果是Python2的程序可以是这样:

  cmp 函数接收两个参数,比较它们,如果小于返回负数,相等返回0,大于返回正数。 key 函数接收一个参数,金沙检测线路js返回用于排序的键。

  lru_cache() 装饰器是缓存淘汰算法(最近最少使用)的一种实现。其使用函数的参数作为key结果作为value缓存在hash结构中(因此函数的参数必须是hashable),如果后续使用相同参数再次调用将从hash从返回结果。同时装饰器还添加了检查缓存转态方法(cache_info())和清空缓存方法(cache_clear())给函数。

  代码中多次调用 demo() 方法。首次调用后结果存在缓存中。cache_info() 返回一个命名元组,包括 hits,misses,maxsize 和 currsize 。当第二次调用时命中缓存的调用将直接返回缓存内容,cache_clear() 用于清空当前缓存。

  为了防止缓存在长时间运行的流程中无限制地增长,特别设置了 maxsize 参数, 默认是128,设置为None时,则禁用LRU功能,缓存可以无限增长。同时还提供了 typed 参数,用于设置是否区别参数类型,默认为Fals。如果设置为True,那么类似如 demo(1) 和 demo(1.0) 将被视为不同的值不同的调用。

  在动态类型的语言(如Python)中,如果需要根据参数的类型执行不同的操作,简单直接的方法就是检查参数的类型。但在行为差异明显的情况下需要分离成单独的函数。 functools 提供 singledispatch() 装饰器注册一组通用函数基于函数的第一个参数的类型自动切换,类似于强类型语言中的函数重载。

  被 singledispatch() 装饰的函数是默认实现, 使用其 register() 属性装饰接收其他类型参数的函数。调用时会根据 register() 中注册的类型自动选择实现函数。没有则使用默认实现。

  另外再有继承的情况下,当类型没有精确匹配时,将根据继承顺序,选择最接近的类型。

  在上面代码中,类D和E没有与任何已注册的泛型函数匹配,所以根据其类的继承顺序进行选择。

  包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...

  要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...

  1.1==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较)。 ·==是比较两个对象是否相等。 1...

  1 functools函数 functools模块用于高阶函数:作用与或者返回其它函数的函数。一般来说,对于该模块...

  函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确...

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!