随笔 - 384  文章 - 0  评论 - 35  阅读 - 142万

python 的偏函数(Partial function)

关于偏函数这个知识点,廖雪峰老师官网说的比较简单,我就再参考了另外一个花里花俏的园子:https://www.cnblogs.com/sui776265233/p/9881628.html#_label0

先引出偏函数

复制代码
#一个带有可变参数的sum函数
def sum(*args):
    s=0
    for i in args:
        s=s+n
    return s


#想要输出(sum(10,20)+sum(1,2,3,4,5))
print(sum(10,20)+sum(1,2,3,4,5))
复制代码

这样虽然通俗易懂,但是很邋遢不专业

于是改为可变参数+关键字参数组合

复制代码
def sum(*args,**others):
    s=0
    for i in args:
        s=s+i
    s1=0
    for k in others:
        s1=s1+others[k]
    return s+s1

D= {'value1':10,'value2':20} 
print(sum(1,2,3,4,5,**D))      
复制代码

这样描写虽说专业了,但是很冗余,不是python的风格,于是就引出了偏函数

复制代码
from  functools import partial

def sum(*args):
    s = 0
    for n in args:
        s = s + n
    return s

sum_add_10    = partial(sum,10)    #10 作用在sum第一个参数的位置
sum_add_10_20 = partial(sum,10,20) #10 20 分别作用在sum第一个和第二个参数的位置
print('A____________我们看下原函数sum的函数地址入口:')
print(sum)
print('B______我们看下partial函数返回函数的地址入口:')
print(partial(sum,10))
print(sum_add_10(1,2,3,4,5))    #  10 + 1 + 2 + 3 + 4 + 5 = 25  sum_add_10 实际上等同于sum(10,*args)
print(sum_add_10_20(1,2,3,4,5)) #  10 + 20 + 1 + 2 + 3 + 4 + 5 = 45
复制代码

partial函数的作用就是:将所作用的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数的后续参数,原函数有关键字参数的一定要带上关键字,没有的话,按原有参数顺序进行补充

偏函数partial一共有三个部分

(1)第一个参数是一个函数或者是python内置函数

(2)第二个参数是一个勒边参数

(3)第二个参数可以是一个命名关键字参数,比如内置函数int的第二个参数就是命名关键字参数,默认base=10,表示int转换时默认是10进制的

偏函数的demo:

from functools import partial

partial(func,*args)

注意偏函数的第三部分(命名关键字参数)

案例:我们定义一个mod求余函数,两个参数,一个是被除数,一个是除数,除数我们这里用命名关键字参数表示,默认值2

扩展:我们的除数不固定,可以是对2就行求余,也可以对3,对4,总之我们需要指定除数的值

返回结果: True 或 False

复制代码
import  functools 
def mod(m,*,key=2):
 return m % key == 0
mod_to_2 = functools.partial(mod,key=2)
print('A__3___使用原函数的默认关键字参数对2进行求余:')
print(mod(3))                           #对2进行求余-- 原函数 使用默认参数
print('B__3___使用偏函数对2进行求余:')
print(mod_to_2(3))                      #对2进行求余-- 新函数 --偏函数产生
mod_to_5 = functools.partial(mod,key=5) 
print('C__25___使用原函数的关键字参数对5进行求余:')
print(mod(25,key=5))                    #对5进行求余 -- 原函数
print('D__25___使用偏函数对5进行求余:')
print(mod_to_5(25))                     #对5进行求余 -- 新函数--偏函数产生
复制代码

总的来说,原函数里面使用的命名关键字参数,我们用偏函数时,可以重新对里面的命名关键字参数赋值

 

posted on   小小喽啰  阅读(798)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示