partial
用于创建一个偏函数,将默认参数包装一个可调用对象,返回结果也是可调用对象。
偏函数可以固定住原函数的部分参数,从而在调用时更简单。
1
2
3
4
5
|
from functools import partial int2 = partial( int , base = 8 ) print (int2( '123' )) # 83 |
update_wrapper
使用 partial 包装的函数是没有__name__和__doc__属性的。
update_wrapper 作用:将被包装函数的__name__等属性,拷贝到新的函数中去。
1
2
3
4
5
6
7
8
9
10
11
12
|
from functools import update_wrapper def wrap2(func): def inner( * args): return func( * args) return update_wrapper(inner, func) @wrap2 def demo(): print ( 'hello world' ) print (demo.__name__) # demo |
wraps
warps 函数是为了在装饰器拷贝被装饰函数的__name__。
就是在update_wrapper上进行一个包装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from functools import wraps def wrap1(func): @wraps(func) # 去掉就会返回inner def inner( * args): print (func.__name__) return func( * args) return inner @wrap1 def demo(): print ( 'hello world' ) print (demo.__name__) # demo |
reduce
在 Python2 中等同于内建函数 reduce
函数的作用是将一个序列归纳为一个输出
1
2
3
4
5
6
7
|
reduce (function, sequence, startValue) from functools import reduce l = range ( 1 , 50 ) print ( reduce ( lambda x,y:x + y, l)) # 1225 |
cmp_to_key
在 list.sort 和 内建函数 sorted 中都有一个 key 参数
1
2
3
4
|
x = [ 'hello' , 'worl' , 'ni' ] x.sort(key = len ) print (x) # ['ni', 'worl', 'hello'] |
Python3 之前还提供了cmp参数来比较两个元素
cmp_to_key 函数就是用来将老式的比较函数转化为 key 函数
lru_cache
允许我们将一个函数的返回值快速地缓存或取消缓存。
该装饰器用于缓存函数的调用结果,对于需要多次调用的函数,而且每次调用参数都相同,则可以用该装饰器缓存调用结果,从而加快程序运行。
该装饰器会将不同的调用结果缓存在内存中,因此需要注意内存占用问题。
1
2
3
4
5
6
7
8
|
from functools import lru_cache @lru_cache (maxsize = 30 ) # maxsize参数告诉lru_cache缓存最近多少个返回值 def fib(n): if n < 2 : return n return fib(n - 1 ) + fib(n - 2 ) print ([fib(n) for n in range ( 10 )]) fib.cache_clear() # 清空缓存 |
singledispatch
单分发器, Python3.4新增,用于实现泛型函数。
根据单一参数的类型来判断调用哪个函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
from functools import singledispatch @singledispatch def fun(text): print ( 'String:' + text) @fun .register( int ) def _(text): print (text) @fun .register( list ) def _(text): for k, v in enumerate (text): print (k, v) @fun .register( float ) @fun .register( tuple ) def _(text): print ( 'float, tuple' ) fun( 'i am is hubo' ) fun( 123 ) fun([ 'a' , 'b' , 'c' ]) fun( 1.23 ) print (fun.registry) # 所有的泛型函数 print (fun.registry[ int ]) # 获取int的泛型函数 # String:i am is hubo # 123 # 0 a # 1 b # 2 c # float, tuple # {<class 'object'>: <function fun at 0x106d10f28>, <class 'int'>: <function _ at 0x106f0b9d8>, <class 'list'>: <function _ at 0x106f0ba60>, <class 'tuple'>: <function _ at 0x106f0bb70>, <class 'float'>: <function _ at 0x106f0bb70>} # <function _ at 0x106f0b9d8> |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_1290259791/article/details/84930850