• Python之偏函数


    1.1偏函数

    偏函数,把函数部分的参数固定下来,相当于为部分的参数添加了一个固定的默认值,形成一 个新的函数并返回
    从partial生成的新函数,是对原函数的封装
    

      

    1.2partial的核心代码

    def partial(func,*args,**keywords):
        def newfunc(*fargs,**fkeywords): #包装函数
            newkeywords = keywords.copy()
            newkeywords.update(fkeywords)
            return func(*(args + fargs),**newkeywords)
        newfunc.func = func   #保留原函数
        newfunc.args = args   #保留原函数的位置参数
        newfunc.keywords = keywords #保留原函数的关键字参数
        return newfunc
    
    def add(x,y):
        return x+y
    partial(add,x=4).func  #对保留原函数的使用
    foo = partial(add,x=4)
    foo(y=5)

    1.3partial的使用

    import functools
    from functools import partial
    import inspect
    def add(x,y)->int:
        return x+y
    new_add = partial(add,y=5)
    sig_p = inspect.signature(new_add)
    params_p = sig_p.parameters
    params_p   #mappingproxy({'x': <Parameter "x">, 'y': <Parameter "y=5">})
    
    import functools
    import inspect
    def add_p1(x,y,*args):
        return x+y
    add_p1 = functools.partial(add_p1,1,3,6,5)
    add_p1(9,10,y=20,x=26) #TypeError: add_p1() got multiple values for argument 'y'
    sig_p1=inspect.signature(add_p1)
    params_p1 = sig_p1.parameters
    params_p1 #mappingproxy({'args': <Parameter "*args">})

    总结:partial传入关键字参数,inspect.signature会保留这个参数签名;patical传入位置参数的时候,函数签名不会保留这个位置参数,所以第二个例子签名只有*args

    本文为原创文章,转载请标明出处
  • 相关阅读:
    mysql高可用架构的构想
    shell进阶——expect免交互工具的使用
    Mysql性能优化之参数配置(转)
    mysql主从同步问题梳理
    使用mysql-proxy实现mysql的读写分离
    Mysql数据库的主从与主主
    Mariadb远程登陆配置及相关问题排查
    redis集群搭建及常用操作
    weblogic的linux静默搭建
    Python traceback 模块,追踪错误
  • 原文地址:https://www.cnblogs.com/harden13/p/8891250.html
Copyright © 2020-2023  润新知