पायथन 3 - कार्य

एक फ़ंक्शन संगठित, पुन: प्रयोज्य कोड का एक ब्लॉक है जो एकल, संबंधित कार्रवाई करने के लिए उपयोग किया जाता है। फ़ंक्शंस आपके आवेदन के लिए बेहतर मॉड्युलैरिटी और उच्च श्रेणी का कोड पुन: उपयोग कर रहे हैं।

जैसा कि आप पहले से ही जानते हैं, पायथन आपको कई अंतर्निहित कार्यों जैसे प्रिंट (), आदि देता है, लेकिन आप अपने स्वयं के कार्य भी बना सकते हैं। इन कार्यों को उपयोगकर्ता-परिभाषित फ़ंक्शन कहा जाता है।

एक कार्य को परिभाषित करना

आप आवश्यक कार्यक्षमता प्रदान करने के लिए कार्यों को परिभाषित कर सकते हैं। पायथन में एक फ़ंक्शन को परिभाषित करने के लिए यहां सरल नियम हैं।

  • फंक्शन ब्लॉक कीवर्ड से शुरू होता है def इसके बाद फ़ंक्शन नाम और कोष्ठक ())।

  • किसी भी इनपुट पैरामीटर या तर्क को इन कोष्ठकों के भीतर रखा जाना चाहिए। आप इन कोष्ठकों के अंदर मापदंडों को भी परिभाषित कर सकते हैं।

  • फ़ंक्शन का पहला स्टेटमेंट एक वैकल्पिक स्टेटमेंट हो सकता है - फ़ंक्शन या डॉकस्ट्रिंग के प्रलेखन स्ट्रिंग ।

  • प्रत्येक फ़ंक्शन के भीतर कोड ब्लॉक एक कोलन (:) के साथ शुरू होता है और इंडेंट होता है।

  • स्टेटमेंट रिटर्न [अभिव्यक्ति] एक फ़ंक्शन से बाहर निकलता है, वैकल्पिक रूप से कॉलर को एक अभिव्यक्ति वापस दे रहा है। बिना किसी दलील के एक रिटर्न स्टेटमेंट रिटर्न नो के समान है।

वाक्य - विन्यास

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

डिफ़ॉल्ट रूप से, मापदंडों का एक व्यवहारिक व्यवहार होता है और आपको उन्हें उसी क्रम में सूचित करने की आवश्यकता होती है जिसे वे परिभाषित किए गए थे।

उदाहरण

निम्न फ़ंक्शन इनपुट पैरामीटर के रूप में एक स्ट्रिंग लेता है और इसे मानक स्क्रीन पर प्रिंट करता है।

def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

एक समारोह बुला रहा है

एक फ़ंक्शन को परिभाषित करना इसे एक नाम देता है, फ़ंक्शन में शामिल होने वाले मापदंडों को निर्दिष्ट करता है और कोड के ब्लॉकों को संरचना करता है।

किसी फ़ंक्शन की मूल संरचना को अंतिम रूप देने के बाद, आप इसे किसी अन्य फ़ंक्शन से कॉल करके या सीधे पायथन प्रॉम्प्ट से निष्पादित कर सकते हैं। निम्नलिखित कॉल करने के लिए एक उदाहरण हैprintme() कार्य -

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme("This is first call to the user defined function!")
printme("Again second call to the same function")

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

This is first call to the user defined function!
Again second call to the same function

संदर्भ बनाम मान से पास करें

पायथन भाषा में सभी पैरामीटर (तर्क) संदर्भ द्वारा पारित किए जाते हैं। इसका मतलब है कि अगर आप किसी फ़ंक्शन के भीतर एक पैरामीटर को संदर्भित करते हैं, तो परिवर्तन कॉलिंग फ़ंक्शन में वापस भी दिखाई देता है। उदाहरण के लिए -

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   print ("Values inside the function before change: ", mylist)
   
   mylist[2]=50
   print ("Values inside the function after change: ", mylist)
   return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

यहां, हम एक ही वस्तु में उत्तीर्ण वस्तु और संलग्न मान का संदर्भ बनाए हुए हैं। इसलिए, यह निम्नलिखित परिणाम उत्पन्न करेगा -

Values inside the function before change:  [10, 20, 30]
Values inside the function after change:  [10, 20, 50]
Values outside the function:  [10, 20, 50]

एक और उदाहरण है जहां संदर्भ द्वारा तर्क पारित किया जा रहा है और संदर्भ को फ़ंक्शन के अंदर लिखा जा रहा है।

#!/usr/bin/python3

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4] # This would assi new reference in mylist
   print ("Values inside the function: ", mylist)
   return

# Now you can call changeme function
mylist = [10,20,30]
changeme( mylist )
print ("Values outside the function: ", mylist)

पैरामीटर mylistकार्यसमूह के लिए स्थानीय है। फ़ंक्शन के भीतर mylist बदलना mylist को प्रभावित नहीं करता है। फ़ंक्शन कुछ भी पूरा नहीं करता है और अंत में यह निम्न परिणाम उत्पन्न करेगा -

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

कार्य तर्क

आप निम्न प्रकार के औपचारिक तर्कों का उपयोग करके किसी फ़ंक्शन को कॉल कर सकते हैं -

  • आवश्यक तर्क
  • कीवर्ड तर्क
  • डिफ़ॉल्ट तर्क
  • चर-लंबाई तर्क

आवश्यक तर्क

आवश्यक तर्क सही स्थितिगत क्रम में एक फ़ंक्शन को दिए गए तर्क हैं। यहां, फ़ंक्शन कॉल में तर्कों की संख्या फ़ंक्शन की परिभाषा के साथ बिल्कुल मेल खाना चाहिए।

फ़ंक्शन को कॉल करने के लिए printme(), आपको निश्चित रूप से एक तर्क पारित करने की आवश्यकता है, अन्यथा यह निम्नानुसार एक सिंटैक्स त्रुटि देता है -

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme()

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

कीवर्ड तर्क

कीवर्ड तर्क फ़ंक्शन कॉल से संबंधित हैं। जब आप किसी फ़ंक्शन कॉल में कीवर्ड तर्क का उपयोग करते हैं, तो कॉल करने वाला पैरामीटर नाम से तर्कों की पहचान करता है।

इससे आप तर्कों को छोड़ सकते हैं या उन्हें क्रम से बाहर कर सकते हैं क्योंकि पायथन दुभाषिया मापदंडों के साथ मूल्यों से मेल खाने के लिए प्रदान किए गए कीवर्ड का उपयोग करने में सक्षम है। आप कीवर्ड कॉल भी कर सकते हैंprintme() निम्नलिखित तरीकों से कार्य करें -

#!/usr/bin/python3

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print (str)
   return

# Now you can call printme function
printme( str = "My string")

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

My string

निम्नलिखित उदाहरण एक स्पष्ट तस्वीर देता है। ध्यान दें कि मापदंडों का क्रम मायने नहीं रखता है।

#!/usr/bin/python3

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print ("Name: ", name)
   print ("Age ", age)
   return

# Now you can call printinfo function
printinfo( age = 50, name = "miki" )

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Name:  miki
Age  50

डिफ़ॉल्ट तर्क

एक डिफ़ॉल्ट तर्क एक तर्क है जो उस तर्क के लिए फ़ंक्शन कॉल में एक मूल्य प्रदान नहीं किए जाने पर डिफ़ॉल्ट मान को मानता है। निम्नलिखित उदाहरण डिफ़ॉल्ट तर्कों पर एक विचार देता है, यह डिफ़ॉल्ट उम्र को प्रिंट करता है यदि यह पारित नहीं हुआ है -

#!/usr/bin/python3

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print ("Name: ", name)
   print ("Age ", age)
   return

# Now you can call printinfo function
printinfo( age = 50, name = "miki" )
printinfo( name = "miki" )

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Name:  miki
Age  50
Name:  miki
Age  35

चर-लंबाई तर्क

फ़ंक्शन को परिभाषित करते समय आपको निर्दिष्ट से अधिक तर्कों के लिए एक फ़ंक्शन को संसाधित करने की आवश्यकता हो सकती है। इन तर्कों को चर-लंबाई तर्क कहा जाता है और आवश्यक और डिफ़ॉल्ट तर्कों के विपरीत, फ़ंक्शन परिभाषा में नाम नहीं हैं।

गैर-कीवर्ड चर तर्कों वाले फ़ंक्शन का सिंटैक्स नीचे दिया गया है -

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

एक तारांकन चिह्न (*) को चर नाम से पहले रखा जाता है जो सभी नॉनकॉर्डर चर तर्कों के मूल्यों को रखता है। फ़ंक्शन कॉल के दौरान कोई अतिरिक्त तर्क निर्दिष्ट नहीं किए जाने पर यह टपल खाली रहता है। निम्नलिखित एक सरल उदाहरण है -

#!/usr/bin/python3

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print ("Output is: ")
   print (arg1)
   
   for var in vartuple:
      print (var)
   return

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Output is:
10
Output is:
70
60
50

अनाम कार्य

इन कार्यों को अनाम कहा जाता है क्योंकि उन्हें मानक तरीके से उपयोग करके घोषित नहीं किया जाता है defकीवर्ड। आप उपयोग कर सकते हैंlambda छोटे अनाम फ़ंक्शंस बनाने के लिए कीवर्ड।

  • लैंबडा फॉर्म किसी भी तर्क को ले सकते हैं लेकिन एक अभिव्यक्ति के रूप में सिर्फ एक मूल्य लौटाते हैं। उनमें कमांड या कई एक्सप्रेशन नहीं हो सकते।

  • एक अनाम फ़ंक्शन प्रिंट करने के लिए प्रत्यक्ष कॉल नहीं हो सकता है क्योंकि लैम्ब्डा को एक अभिव्यक्ति की आवश्यकता होती है।

  • लैम्ब्डा फंक्शंस के अपने स्थानीय नाम स्थान होते हैं और वे अपने पैरामीटर सूची में और वैश्विक नामस्थान में उन लोगों के अलावा चर का उपयोग नहीं कर सकते हैं।

  • यद्यपि ऐसा प्रतीत होता है कि लंबदा एक फ़ंक्शन का एक-पंक्ति संस्करण है, वे C या C ++ में इनलाइन स्टेटमेंट के बराबर नहीं हैं, जिसका उद्देश्य प्रदर्शन कारणों के लिए आह्वान के दौरान फ़ंक्शन को पास करके आवंटन को स्टैक करना है।

वाक्य - विन्यास

का वाक्य विन्यास lambda कार्यों में केवल एक कथन शामिल है, जो इस प्रकार है -

lambda [arg1 [,arg2,.....argn]]:expression

निम्नलिखित एक उदाहरण है कि कैसे दिखाया जाए lambda फ़ंक्शन कार्यों का रूप -

#!/usr/bin/python3

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2

# Now you can call sum as a function
print ("Value of total : ", sum( 10, 20 ))
print ("Value of total : ", sum( 20, 20 ))

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Value of total :  30
Value of total :  40

वापसी विवरण

स्टेटमेंट रिटर्न [अभिव्यक्ति] एक फ़ंक्शन से बाहर निकलता है, वैकल्पिक रूप से कॉलर को एक अभिव्यक्ति वापस दे रहा है। बिना किसी दलील के एक रिटर्न स्टेटमेंट रिटर्न नो के समान है।

नीचे दिए गए सभी उदाहरण कोई मूल्य नहीं लौटा रहे हैं। आप एक फ़ंक्शन से एक मान वापस कर सकते हैं -

#!/usr/bin/python3

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print ("Inside the function : ", total)
   return total

# Now you can call sum function
total = sum( 10, 20 )
print ("Outside the function : ", total )

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Inside the function :  30
Outside the function :  30

चर का दायरा

एक कार्यक्रम में सभी चर उस कार्यक्रम के सभी स्थानों पर सुलभ नहीं हो सकते हैं। यह इस बात पर निर्भर करता है कि आपने चर कहां घोषित किया है।

एक चर का दायरा कार्यक्रम के उस हिस्से को निर्धारित करता है जहां आप किसी विशेष पहचानकर्ता तक पहुंच सकते हैं। पायथन में चर के दो बुनियादी दायरे हैं -

  • सार्वत्रिक चर
  • स्थानीय चर

वैश्विक बनाम स्थानीय चर

चर जो एक फ़ंक्शन बॉडी के अंदर परिभाषित किए गए हैं उनके पास एक स्थानीय गुंजाइश है, और बाहर परिभाषित लोगों के पास एक वैश्विक गुंजाइश है।

इसका मतलब यह है कि स्थानीय चर को केवल उस फ़ंक्शन के अंदर एक्सेस किया जा सकता है जिसमें उन्हें घोषित किया गया है, जबकि वैश्विक चर को सभी फ़ंक्शन के दौरान पूरे फ़ंक्शन तक पहुँचा जा सकता है। जब आप किसी फ़ंक्शन को कॉल करते हैं, तो उसके अंदर घोषित चर दायरे में लाए जाते हैं। निम्नलिखित एक सरल उदाहरण है -

#!/usr/bin/python3

total = 0   # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print ("Inside the function local total : ", total)
   return total

# Now you can call sum function
sum( 10, 20 )
print ("Outside the function global total : ", total )

जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Inside the function local total :  30
Outside the function global total :  0