Python function handle ala Matlab

前端 未结 3 899
面向向阳花
面向向阳花 2021-02-13 19:19

In MATLAB it is possible to create function handles with something like

myfun=@(arglist)body

This way you can create functions on the go withou

相关标签:
3条回答
  • 2021-02-13 19:49

    Turns out there is something that goes all the way back to 2.5 called function partials that are pretty much the exact analogy to function handles.

    from functools import partial
    def myfun(*args, first="first default", second="second default", third="third default"):
        for arg in args:
            print(arg)
        print("first: " + str(first))
        print("second: " + str(second))
        print("third: " + str(third))
    
    mypart = partial(myfun, 1, 2, 3, first="partial first")
    
    mypart(4, 5, second="new second")
    1
    2
    3
    4
    5
    first: partial first
    second: new second
    third: third default
    
    0 讨论(0)
  • 2021-02-13 20:01

    This is not quite the full answer. In matlab, one can make a file called funct.m:

    function funct(a,b)
       disp(a*b)
    end
    

    At the command line:

    >> funct(2,3)
         6
    

    Then, one can create a function handle such as:

    >> myfunct = @(b)funct(10,b))
    

    Then one can do:

       >> myfunct(3)
           30
    

    A full answer would tell how to do this in python.

    Here is how to do it:

    def funct(a,b):
        print(a*b)
    

    Then:

    myfunct = lambda b: funct(10,b)
    

    Finally:

    >>> myfunct(3)
    30
    
    0 讨论(0)
  • 2021-02-13 20:07

    Python's lambda functions are somewhat similar:

    In [1]: fn = lambda x: x**2 + 3*x - 4
    
    In [2]: fn(3)
    Out[2]: 14
    

    However, you can achieve similar effects by simply defining fn() as a function:

    In [1]: def fn(x):
       ...:   return x**2 + 3*x - 4
       ...: 
    
    In [2]: fn(4)
    Out[2]: 24
    

    "Normal" (as opposed to lambda) functions are more flexible in that they allow conditional statements, loops etc.

    There's no requirement to place functions inside dedicated files or anything else of that nature.

    Lastly, functions in Python are first-class objects. This means, among other things, that you can pass them as arguments into other functions. This applies to both types of functions shown above.

    0 讨论(0)
提交回复
热议问题