2017-06-07 12 views
5

मान लें कि मेरे पास मेरी स्क्रिप्ट में दो कार्य हैं: sum_numbers और print_sum। उनका कार्यान्वयन इस तरह है:क्या पाइथन लिपि में फ़ंक्शंस का क्रम मायने रखता है?

def sum_numbers(a, b): 
    return a + b 

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

तो मेरा सवाल यह है: क्या वह आदेश जिसमें कार्य लिखा गया है? अगर मैंने पहले print_sum फ़ंक्शन लिखा था और फिर sum_numbers, क्या कोड अभी भी काम करेगा? अगर जवाब हाँ है, तो क्या यह हमेशा काम करता है?

+1

"? * ... कोड अभी भी काम करेगा *" <- - इसके बारे में पूछने के बजाय इस भाग को आजमाने के लिए यह सचमुच तेज़ है। जब भी आप पूछना चाहते हैं "* क्या चीज पाइथन में काम करती है? *", इसे पहले आज़माएं। यदि परिणाम आपको परेशान करता है, तो आप एक और अधिक रोचक और विशिष्ट प्रश्न पूछने में सक्षम होंगे। –

उत्तर

9

पाइथन की परवाह करने वाली एकमात्र चीज यह है कि जब इसे वास्तव में देखा जाता है तो नाम परिभाषित किया जाता है। बस इतना ही।

आपके मामले में, यह ठीक है, ऑर्डर वास्तव में कोई फर्क नहीं पड़ता क्योंकि आप केवल परिभाषित कर रहे हैं। यही है, आप बस दो नए नाम पेश कर रहे हैं, कोई लुकअप नहीं।

अब, यदि आप इनमें से किसी एक को बुलाया (प्रभाव में, एक लुक-अप प्रदर्शन किया था) और आसपास के क्रम बंद:

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

print_sum(2, 4) 

def sum_numbers(a, b): 
    return a + b 

आप मुसीबत (NameError) में होगा, क्योंकि यह एक नाम (sum_numbers) ढूंढने का प्रयास करेगा जो अभी तक अस्तित्व में नहीं है।

तो सामान्य रूप से, हाँ, आदेश मामला है; पाइथन में नामों की कोई उछाल नहीं है जैसे अन्य भाषाओं में (जैसे जावास्क्रिप्ट) है।

6

इससे कोई फ़र्क नहीं पड़ता कि फ़ंक्शंस किस क्रम में बनाया गया है। यह केवल मायने रखती है जब कार्य करने के लिए कॉल किया जाता है:

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

def sum_numbers(a, b): 
    return a + b 

print_sum(1, 3) 
# 4 

कि क्योंकि समय print_sum पर कहा जाता है दोनों कार्यों मौजूद नहीं है काम करता है। लेकिन यह क्योंकि sum_numbers विफल हो जाएगा यदि आप sum_numbers को परिभाषित करने से पहले फ़ंक्शन को कॉल अभी तक परिभाषित नहीं है:

def print_sum(a, b): 
    print(sum_numbers(a, b)) 

print_sum(1, 3) 

def sum_numbers(a, b): 
    return a + b 

फेंकता है:

--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-34-37c0e3733861> in <module>() 
     2  print(sum_numbers(a, b)) 
     3 
----> 4 print_sum(1, 3) 
     5 
     6 def sum_numbers(a, b): 

<ipython-input-34-37c0e3733861> in print_sum(a, b) 
     1 def print_sum(a, b): 
----> 2  print(sum_numbers(a, b)) 
     3 
     4 print_sum(1, 3) 
     5 

NameError: name 'sum_numbers' is not defined 
संबंधित मुद्दे