加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Python中functools模块咋办 提供哪些函数

发布时间:2023-10-16 11:14:34 所属栏目:语言 来源:
导读:在这篇文章中我们来了解一下“Python中functools模块怎么用,提供哪些函数”,一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的

在这篇文章中我们来了解一下“Python中functools模块怎么用,提供哪些函数”,一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!

用于创建一个偏函数,将默认参数包装一个可调用对象,返回结果也是可调用对象。

偏函数可以固定住原函数的部分参数,从而在调用时更简单。

from functools import partial

int2 = partial(int, base=8)

print(int2('123'))

# 83

update_wrapper

使用 partial 包装的函数是没有__name__和__doc__属性的。

update_wrapper 作用:将被包装函数的__name__等属性,拷贝到新的函数中去。

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上进行一个包装

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

函数的作用是将一个序列归纳为一个输出

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 参数

x = ['hello','worl','ni']

x.sort(key=len)

print(x)

# ['ni', 'worl', 'hello']

Python3 之前还提供了cmp参数来比较两个元素

cmp_to_key 函数就是用来将老式的比较函数转化为 key 函数

lru_cache

允许我们将一个函数的返回值快速地缓存或取消缓存。

该装饰器用于缓存函数的调用结果,对于需要多次调用的函数,而且每次调用参数都相同,则可以用该装饰器缓存调用结果,从而加快程序运行。

该装饰器会将不同的调用结果缓存在内存中,因此需要注意内存占用问题。

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新增,用于实现泛型函数。

根据单一参数的类型来判断调用哪个函数。

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

以上就是关于“Python中functools模块怎么用,提供哪些函数”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章