Pass a function as a variable with one input fixed

前端 未结 4 1596
庸人自扰
庸人自扰 2020-12-19 12:16

Say I have a two dimensional function f(x,y) and another function G(function) that takes a function as an input. BUT, G only takes one dimensional functions as input and I\

4条回答
  •  爱一瞬间的悲伤
    2020-12-19 12:51

    The functools.partial function can be used to do this (note, it's not entirely clear where c comes from in your example code, so I've assumed it's some constant).

    import functools
    
    def f(x,y):
        return x+y
    
    c = 3
    
    G = functools.partial(f, c)
    G(4)
    

    I think this is more explicit than the lambda approaches suggested so far.

    Edit: replacing the right most argument is not possible as we are dealing with positional arguments. Depending on the level of control available, you could introduce a wrapper which handles the switching:

    import functools
    
    def f(x,y):
        return x+y
    
    def h(c,y):
        return f(y,c)
    
    c = 3
    
    G = functools.partial(h, c)
    G(4)
    

    But I think you start to sacrifice readability and maintainability at this point...

提交回复
热议问题