2016-05-18 14 views
2

Es wurde in this comment vorgeschlagen, dass es einen Unterschied gibt, wie Matlab und Python umgehen Funktionen. Von dem, was ich sagen kann, wenn ich die beiden ansehe und benutze, gibt es keinen Unterschied zwischen den beiden, aber vielleicht fehlt mir etwas?Unterschied zwischen Matlab-Funktion 'Handle' und Python-Funktion 'Objekt'

fun = @(x) x.^2 + 1; 

In Python, mit einer Lambda-Funktion, können Sie eine ähnliche Funktion wie folgen erstellen:

def fun(x): 
    return x^2 

In beide

In Matlab, Sie einen schnellen Funktionsgriff wie dies schaffen würden Sprachen, ist es möglich, den Begriff "Spaß" an eine andere Funktion als Argument zu senden - aber der Kommentator, mit dem ich verlinkt habe, unterstellte, dass sie nicht gleich sind und/oder anders verwendet werden müssen.

Was fehlt mir?

Antwort

3

Der erste Kommentar scheint einfach die Idee zu wiederholen, dass Sie eine MATLAB-Funktion als Argument übergeben können (obwohl die Antwort nichts aussagte, was mich anders denken lassen würde). Der zweite Kommentar schien dies zu interpretieren, dass der erste Kommentator gedacht, dass man konnte nicht dies in Python tun und reagiert zu erklären, dass Sie entweder eine Lambda oder passieren die Funktion direkt verwenden können.

Unabhängig davon, vorausgesetzt, dass Sie sie richtig verwenden, ist eine Funktion behandeln in MATLAB funktionell gleichwertig mit entweder ein Lambda oder Funktionsobjekt als ein Eingabeargument in Python.

Wenn Sie in Python das () nicht an das Ende der Funktion anhängen, führt es die Funktion nicht aus und liefert stattdessen das Funktionsobjekt, das dann an eine andere Funktion übergeben werden kann.

# Function which accepts a function as an input 
def evalute(func, val) 
    # Execute the function that's passed in 
    return func(val) 

# Standard function definition 
def square_and_add(x): 
    return x**2 + 1 

# Create a lambda function which does the same thing. 
lambda_square_and_add = lambda x: x**2 + 1 

# Now pass the function to another function directly 
evaluate(square_and_add, 2) 

# Or pass a lambda function to the other function 
evaluate(lambda_square_and_add, 2) 

In MATLAB Sie haben eine Funktion Griff zu verwenden, da MATLAB eine Funktion auszuführen versucht, auch wenn Sie die () weglassen.

function res = evaluate(func, val) 
    res = func(val) 
end 

function y = square_and_add(x) 
    y = x^2 + 1; 
end 

%// Will try to execute square_and_add with no inputs resulting in an error 
evaluate(square_and_add) 

%// Must use a function handle 
evaluate(@square_and_add, 2) 
+0

Danke für die schnelle Antwort, akzeptiert dies als die Antwort – cbcoutinho