偏函数(partial function)

摘要:
如果一个函数有一些参数,并且在大多数使用场景中参数的值是固定的,我们有两种方法来简化它:在定义原始函数的地方设置参数的默认值,在相应的参数处设置paramx=default。分部函数使用functools分部基于原始函数生成分部函数。我们还可以创建一个新函数:defadd5:returna+5。创建新函数是可以的,但原始add函数的重用率不高。

如果一个函数带了一些参数,在大部分使用场景中,某个参数的值是固定的,那我们有两种简化办法:

  1. 参数默认值
    即在原始函数定义的地方,对应参数处设置paramx=default。

    但是有一点不好,如果paramx设置了默认值,这个参数之后的其他参数也要跟着设置默认值。

    整体而言,对原有函数有改动。

  2. 偏函数
    使用functools.partial(original_fuc,param1,param....)在原有函数基础上生成一个偏函数。

    所谓偏函数,就是以原函数为基础,将某个位置上的参数固定住(默认是从第一个参数固定),后续参数重新扩展传递给原函数,对外则是生成一个新函数。

    比如:

    def add(a,b):
        return a+b
    

    这是两数相加的函数,现在我们要用一个函数,输入一个参数,返回这个参数+5的结果。

    参数默认值的方法可以这样写:

    def add(a,b=5):
        return a+b
    

    但原函数本来就是两数相加,即使现在可能一个参数+5的场景用的多,给被加数给个默认值5,也是很突兀的写法。

    我们也可以新写一个函数:

    def add5(a):
        return a+5
    

    这样新创建一个函数,倒也没什么,但是对原有add函数复用不高。

    使用偏函数可以这样写:

    import functools
    add5 = functools.partial(add, b=5)
    
    #test add5
    ret = add5(10)
    print(ret)
    

    通过partial中b=5,将参数b的值固定下来。

免责声明:文章转载自《偏函数(partial function)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle undo表空间异常激增排查zookeeper & Dubbo下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

4.3 verilog中的function用法与例子

函数的功能和任务的功能类似,但二者还存在很大的不同。在 Verilog HDL 语法中也存在函数的定义和调用。  1.函数的定义  函数通过关键词 function 和 endfunction 定义,不允许输出端口声明(包括输出和双向端口) ,但可以有多个输入端口。函数定义的语法如下: function [range] function_id;     i...

2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR

Sqlserver 自定义函数 Function使用介绍 前言:         在SQL server中不仅可以可以使用系统自带的函数(时间函数、聚合函数、字符串函数等等),还可以根据需要自定义函数。 一、定义: 用户自定义函数的类型: 1、标量值函数(返回一个标量值) 2、表格值函数(内联表格值函数、多语句表值函数,返回一个结果集即返回多个值...

function类型(c++11)

1.c++五大可调用的对象   可调用的对象常常作为泛型算法的实参 1)函数 2)函数指针 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函数 void fun1(int a) { cout << a << endl; } void fun2(int a)...