पायथन फ़ंक्शन फ़ंक्शन के रूप में कार्य करता है?


116

क्या एक पायथन फ़ंक्शन दूसरे फ़ंक्शन का तर्क हो सकता है?

कहते हैं:

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass

तो यह मूल रूप से दो प्रश्न हैं:

  1. क्या यह बिल्कुल अनुमति है?
  2. और अगर यह है, तो मैं दूसरे फ़ंक्शन के अंदर फ़ंक्शन का उपयोग कैसे करूं? क्या मुझे निष्पादन (), eval () या ऐसा कुछ उपयोग करने की आवश्यकता होगी? उनके साथ खिलवाड़ करने की कभी जरूरत नहीं पड़ी।

BTW, extraArgs एक सूची है / दूसरे के तर्क के टपल।


जवाबों:


138

क्या एक पायथन फ़ंक्शन दूसरे फ़ंक्शन का तर्क हो सकता है?

हाँ।

def myfunc(anotherfunc, extraArgs):
    anotherfunc(*extraArgs)

अधिक विशिष्ट होने के लिए ... विभिन्न तर्कों के साथ ...

>>> def x(a,b):
...     print "param 1 %s param 2 %s"%(a,b)
...
>>> def y(z,t):
...     z(*t)
...
>>> y(x,("hello","manuel"))
param 1 hello param 2 manuel
>>>

extraArgs एक फ़ंक्शन भी हो सकता है? यदि हां, तो आप इसे कैसे कहते हैं?
ऐसेंउसी

@sekai हां, extraArgs एक फंक्शन भी हो सकता है।
मैनुअल साल्वाडोरस

3
यह कहाँ प्रलेखित है?
4dc0

32

यहाँ एक और तरीका है *args(और वैकल्पिक रूप से भी) **kwargs,:

def a(x, y):
  print x, y

def b(other, function, *args, **kwargs):
  function(*args, **kwargs)
  print other

b('world', a, 'hello', 'dude')

उत्पादन

hello dude
world

ध्यान दें कि function, *args, **kwargsहै इसी क्रम में हो सकता है और समारोह फ़ंक्शन को कॉल करने के लिए पिछले तर्क होना जरूरी है।


3
* Args और ** kwargs के बारे में अधिक infos यहां पाया जा सकता pythontips.com/2013/08/04/args-and-kwargs-in-python-explained
Pipo


4

यकीन है, यही कारण है कि अजगर निम्नलिखित विधियों को लागू करता है जहां पहला पैरामीटर एक फ़ंक्शन है:

  • नक्शा (फ़ंक्शन, iterable, ...) - iterable के प्रत्येक आइटम पर फ़ंक्शन लागू करें और परिणामों की सूची लौटाएं।
  • फ़िल्टर (फ़ंक्शन, iterable) - पुनरावृति के उन तत्वों से एक सूची का निर्माण करते हैं जिनके लिए फ़ंक्शन सही होता है।
  • कम करना (फ़ंक्शन, iterable [, initializer]) - दो तर्कों के फ़ंक्शन को क्रमिक रूप से चलने-फिरने के आइटम पर, बाएं से दाएं पर लागू करें, ताकि iterable को एक मान में कम किया जा सके।
  • lambdas

2
  1. हां, इसकी अनुमति है।
  2. आप किसी अन्य के रूप में फ़ंक्शन का उपयोग करते हैं: anotherfunc(*extraArgs)

2
  1. हाँ। अपने इनपुट तर्क / फ़ंक्शन में फ़ंक्शन कॉल को शामिल करके, आप एक ही बार में दो (या अधिक) फ़ंक्शन कॉल कर सकते हैं।

उदाहरण के लिए:

def anotherfunc(inputarg1, inputarg2):
    pass
def myfunc(func = anotherfunc):
    print func

जब आप myfunc कहते हैं, तो आप ऐसा करते हैं:

myfunc(anotherfunc(inputarg1, inputarg2))

यह एक औरfunc के रिटर्न मान को प्रिंट करेगा।

उम्मीद है की यह मदद करेगा!


2

फ़ंक्शन के अंदर कार्य: हम फ़ंक्शन को पैरामीटर के रूप में भी उपयोग कर सकते हैं ..

दूसरे शब्दों में, हम कह सकते हैं कि एक फ़ंक्शन का आउटपुट भी ऑब्जेक्ट के लिए एक संदर्भ है, नीचे देखें कि आंतरिक फ़ंक्शन का आउटपुट नीचे की तरह बाहर के फ़ंक्शन को कैसे संदर्भित कर रहा है।

def out_func(a):

  def in_func(b):
       print(a + b + b + 3)
  return in_func

obj = out_func(1)
print(obj(5))

परिणाम होगा .. १४

उम्मीद है की यह मदद करेगा।



1
def x(a):
    print(a)
    return a

def y(func_to_run, a):
    return func_to_run(a)

y(x, 1)

मुझे लगता है कि एक अधिक उचित नमूना होगा। अब मुझे आश्चर्य होता है कि यदि किसी फ़ंक्शन को दूसरे फ़ंक्शन में सबमिट करने के लिए फ़ंक्शन को उपयोग करने का एक तरीका है। मेरा मानना ​​है कि सी ++ में है, लेकिन पायथन में मुझे यकीन नहीं है।


1

पायथन में सज्जाकार बहुत शक्तिशाली होते हैं क्योंकि यह प्रोग्रामर को फ़ंक्शन को तर्क के रूप में पारित करने की अनुमति देता है और किसी अन्य फ़ंक्शन के अंदर फ़ंक्शन को भी परिभाषित कर सकता है।

def decorator(func):
      def insideFunction():
        print("This is inside function before execution")
        func()
      return insideFunction

def func():
    print("I am argument function")

func_obj = decorator(func) 
func_obj()

उत्पादन

  • यह निष्पादन से पहले फ़ंक्शन के अंदर है
  • मैं तर्क कार्य कर रहा हूं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.