• 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

    本文为原创文章,转载请标明出处
  • 相关阅读:
    Android:res之layer-list的用法
    Android:改变Activity切换方式
    Android:dimen尺寸资源文件的使用
    Android Studio安装、配置
    Android Studio 初探
    Android SDK开发包国内下载地址
    linux下centos安装android sdk最新全面教程【可行】
    CentOS 7.0安装Nvidia驱动
    javascript基础部分
    js api 实现钉钉免登
  • 原文地址:https://www.cnblogs.com/harden13/p/8891250.html
Copyright © 2020-2023  润新知