2011-04-21 30 views
10

在MATLAB中,可以用什麼來創造function handlesPython函數把手ALA Matlab的

[email protected](arglist)body 

這種方式,你可以創建在旅途中的功能,而無需創建M文件。

Python中是否存在一種等價的方法來在一行中聲明函數和變量並稍後調用它們?

+1

你在找'lambda'嗎? 'def'有什麼問題? – 2011-04-21 11:14:57

回答

15

Python的lambda函數有幾分相似:

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

In [2]: fn(4) 
Out[2]: 24 

「正常」(相對於拉姆達)功能:

In [1]: fn = lambda x: x**2 + 3*x - 4 

In [2]: fn(3) 
Out[2]: 14 

但是,您可以通過簡單地定義fn()作爲函數實現類似的效果更靈活,因爲它們允許條件語句,循環等。

沒有要求將函數放置在專用文件中或任何其他性質的東西。

最後,Python中的函數是第一類對象。這意味着,除其他外,您可以將它們作爲參數傳遞給其他函數。這適用於上述兩種類型的功能。

+1

函數句柄也可以在Matlab中作爲參數傳遞。 – MatlabSorter 2011-04-21 12:16:20

+1

@MatlabSorter:在python中,函數(或lambda)可以作爲參數傳遞給另一個函數。你不需要一個「句柄」,你只需傳遞函數本身。 – 2011-04-21 14:52:33

8

這不是完全的答案。在MATLAB中,一個可以讓一個名爲funct.m:

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

在命令行:

>> funct(2,3) 
    6 

然後,我們可以創建一個函數句柄如:

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

然後可以這樣做:

>> myfunct(3) 
     30 

A full ans你會告訴如何在Python中做到這一點。

這裏是如何做到這一點:

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

然後:

myfunct = lambda b: funct(10,b) 

最後:

>>> myfunct(3) 
30 
0

原來有一些可以追溯到2.5一路叫function partials這幾乎與功能手柄的確切類比。

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