zoukankan      html  css  js  c++  java
  • Python的偏函数(Partial Function Application)

    这个概念说实话以前听过,但没深究过,也没用到过…但是被人问到了,就查来记录一下。

    查下资料,发现这个东西说白了就是:部分参数有默认值的函数,Orz。再回过头来看他的英文名字,partial function application,emm,可以理解了。至于中文的偏是怎么来的,我也不知道。

    再看官方的定义:

    作用是在函数调用前,预先固定参数的方法。

    为什么发明这个东西?

    • 少传参数
    • 更短
    • 更简洁

    说白了都是一个事情……

    那么先看一下,如果我们自己要实现这个功能,会怎么搞?

    看下面这个例子

    In [105]: def test(x, y):
         ...:     return x*y
         ...:
         ...:
    
    In [106]: test(2, 3)
    Out[106]: 6
    
    In [107]: def test(x, y=2):
         ...:     return x*y
         ...:
    
    In [108]: test(2)
    Out[108]: 4
    

    很简单,对不?

    那有没有现成的办法呢?当然有,那就是functools库

    In [109]: from functools import partial
    
    In [110]: def test(x, y):
         ...:     return x*y
         ...:
    
    In [111]: new_test = partial(test, y=3)
    
    In [112]: new_test(3)
    Out[112]: 9
    

    就这么一个小东西…

    那么他有其他的好处么?

    有,复用性更强了。

    比方说如果想把y默认值再改成4,不用自己再去些一个 def test(x, y=4),可以直接声明一个继续用了。

    参考:

    https://www.liaoxuefeng.com/wiki/1016959663602400/1017454145929440

    https://www.jianshu.com/p/80e07a4728e4

  • 相关阅读:
    线段树区间最大子段和
    NTT数论变换
    cdq分治·三维偏序问题
    线段树区间开方
    怎么联系$zcy$呢?
    题解 CF375D 【Tree and Queries】
    点分治模板
    Good Bye 2018题解
    Hello 2019题解
    Codeforces Round #525 (Div. 2)题解
  • 原文地址:https://www.cnblogs.com/wswang/p/13175770.html
Copyright © 2011-2022 走看看