2011-01-15 12 views
25

कुछ भाषाओं में सी # जैसे पैरामीटर का उपयोग करके मूल्यों को वापस करने की सुविधा है। एक उदाहरण पर एक नज़र डालें:क्या पाइथन में आउटपुट पैरामीटर के माध्यम से एक मूल्य वापस करने का कोई तरीका है?

class OutClass 
{ 
    static void OutMethod(out int age) 
    { 
     age = 26; 
    } 
    static void Main() 
    { 
     int value; 
     OutMethod(out value); 
     // value is now 26 
    } 
} 

तो वहाँ कुछ भी अजगर में इसी तरह के एक मूल्य के पैरामीटर का उपयोग कर भी प्राप्त करने के लिए है?

+0

समझने के लिए कठिन सवाल देख सकते हैं। विस्तृत करने के लिए परवाह? – tokland

+0

@ टोकलैंड: मुझे लगता है कि ओपी क्या करना चाहता है वह मान के बजाय संदर्भ द्वारा तर्कों को पास करना है क्योंकि पाइथन आमतौर पर करता है। –

+0

क्या आपका मतलब "आउटपुट" - "रिटर्न" था? या संदर्भ द्वारा पास पैरामीटर की तरह कुछ? – Elalfer

उत्तर

41

, करने का कोई कारण नहीं है के बाद से अजगर से अधिक मान लौट सकते हैं:

def func(): 
    return 1,2,3 

a,b,c = func() 

लेकिन आप भी एक परिवर्तनशील पैरामीटर पारित कर सकते हैं, और मान के साथ-साथ:

def func(a): 
    a.append(1) 
    a.append(2) 
    a.append(3) 

L=[] 
func(L) 
print L 
+4

हां, यह पाइथन में एकाधिक रिटर्न मानों के बारे में जाने का तरीका है। दिए गए पैरामीटर – helloworld922

+1

में से किसी एक को संशोधित करने की कोशिश करने से ट्यूपल्स बेहतर है, मुझे यह सुनिश्चित नहीं है कि "एकाधिक मान लौटा रहे हैं" यहां उचित है। यह वास्तव में एक मान देता है जो एक 'tuple' है जिसमें एकाधिक तत्व होते हैं। – Tarik

+10

कारण है। उदाहरण के लिए अच्छी तरह से ज्ञात 'TryDo' पैटर्न: 'अगर try_parse (परिणाम परिणाम): प्रिंट (परिणाम)'। यह कोड साफ़ है। यहाँ tuples का उपयोग करने की कोशिश करें और यह बदसूरत हो जाएगा। – renadeen

3

इस तरह की एक सूची या कुछ पास करें और वहां वापसी मूल्य डाल दें।

5

आपका मतलब संदर्भ से गुजरना है?

पायथन ऑब्जेक्ट के लिए संदर्भ संदर्भ से पास होना डिफ़ॉल्ट है। हालांकि, मुझे नहीं लगता कि आप पाइथन में संदर्भ बदल सकते हैं (अन्यथा यह मूल वस्तु को प्रभावित नहीं करेगा)।

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

def addToList(theList): 
    theList.append(3) 
    theList.append(4) 

def addToNewList(theList): 
    theList = list() 
    theList.append(3) 
    theList.append(4) 

myList = list() 
myList.append(1) 
myList.append(2) 
addToList(myList) 
print(myList) 
addToNewList(myList) 
print(myList) 
+2

यह सही है, संदर्भ स्वयं मूल्य से गुजरता है। –

+4

पायथन "कॉल-बाय-ऑब्जेक्ट" है। http://effbot.org/zone/call-by-object.htm –

+0

पायथन ** नहीं ** संदर्भ द्वारा कॉल करें। –

0

इसके अतिरिक्त, यदि आपको कुछ कोड पढ़ने जैसा लगता है, तो मुझे लगता है कि pywin32 आउटपुट पैरामीटर को संभालने का एक तरीका है।

विंडोज एपीआई में आउटपुट पैरामीटर पर भारी भरोसा करना आम बात है, इसलिए मुझे लगता है कि उन्होंने इसे किसी तरह से निपटाया होगा।

0

आप इसे म्यूटेबल ऑब्जेक्ट्स के साथ कर सकते हैं, लेकिन ज्यादातर मामलों में यह समझ में नहीं आता है क्योंकि आप कई मान वापस कर सकते हैं (या एक शब्दकोश यदि आप मौजूदा कॉल को तोड़ने के बिना फ़ंक्शन के रिटर्न वैल्यू को बदलना चाहते हैं)।

मैं केवल एक ऐसे मामले के बारे में सोच सकता हूं जहां आपको इसकी आवश्यकता हो सकती है - जो थ्रेड के बीच एक मूल्य गुजर रहा है, या थ्रेडिंग है।

def outer(): 
    class ReturnValue: 
     val = None 
    ret = ReturnValue() 
    def t(): 
     # ret = 5 won't work obviously because that will set 
     # the local name "ret" in the "t" function. But you 
     # can change the attributes of "ret": 
     ret.val = 5 

    threading.Thread(target = t).start() 

    # Later, you can get the return value out of "ret.val" in the outer function 
0

आउटपुट डेटा तार और नंबर दिए गए हैं, या अगर वे तार और संख्या (आमतौर पर, वेरिएंट), तो आप उन्हें एमएस के उपयोग के द्वारा प्राप्त कर सकते हैं एक्सेल में से एक आयामी सरणी, मैं कर रहे हैं मैंने एक समाधान प्रदान किया है जब मैंने ऑटोकैड (किसी प्रश्न से पूछा लेकिन उसे कोई जवाब नहीं मिला) के साथ समस्या का सामना करना पड़ा, तो आप मेरा समाधान here

संबंधित मुद्दे

 संबंधित मुद्दे