2011-04-21 19 views
10

MATLAB में आला यह संभव है की तरहअजगर समारोह संभाल मैटलैब

[email protected](arglist)body 

कुछ के साथ function handles बनाने के लिए इस तरह से आप एम फ़ाइलों को बनाने के बिना चलते-फिरते कार्यों बना सकते हैं।

क्या पाइथन में एक पंक्ति में कार्यों और चर घोषित करने और बाद में कॉल करने के लिए एक समान तरीका है?

+1

क्या आप 'लैम्ब्डा' ढूंढ रहे हैं? 'Def' के साथ क्या गलत है? –

उत्तर

15

पायथन के लैम्ब्डा कार्यों कुछ इसी तरह कर रहे हैं:

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() को परिभाषित करते हुए इसी तरह के परिणाम प्राप्त कर सकते हैं अधिक लचीला हैं कि वे सशर्त बयान, लूप इत्यादि की अनुमति देते हैं

समर्पित फ़ाइलों के अंदर फ़ंक्शंस रखने की कोई आवश्यकता नहीं है या उस प्रकृति के कुछ और।

आखिरकार, पायथन में कार्य प्रथम श्रेणी की वस्तुएं हैं। इसका मतलब है, अन्य चीजों के साथ, कि आप उन्हें अन्य कार्यों में तर्क के रूप में पारित कर सकते हैं। यह ऊपर दिखाए गए दोनों प्रकार के कार्यों पर लागू होता है।

+1

फ़ंक्शन हैंडल को मैटलैब में तर्क के रूप में भी पारित किया जा सकता है। – MatlabSorter

+1

@ मटालाबॉर्टर: पायथन में एक फ़ंक्शन (या लैम्ब्डा) को किसी अन्य फ़ंक्शन के लिए तर्क के रूप में पारित किया जा सकता है। आपको "हैंडल" की आवश्यकता नहीं है, आप बस फ़ंक्शन को पास करते हैं। –

8

यह बिल्कुल पूरा जवाब नहीं है। कमांड लाइन पर

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

: matlab में, एक एक फ़ाइल बुलाया funct.m कर सकते हैं

>> funct(2,3) 
    6 

फिर, एक तरह के रूप में एक समारोह संभाल बना सकते हैं:

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

फिर कोई कर सकता है:

>> myfunct(3) 
     30 

एक पूर्ण उत्तर यह बताएगा कि इसे पायथन में कैसे किया जाए।

तरीके से ऐसा करने के लिए है:

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 
संबंधित मुद्दे