2011-03-11 15 views
20

मुझे पता है मैं के साथ एक साथ कई मूल्यों के लिए कई चर असाइन कर सकते हैं कर रहा हूँ:असाइन एकाधिक चर

(foo, bar, baz) = 1, 2, 3 

और foo = 1, बार = 2, और इतने पर है।

लेकिन मैं चर के नामों को अधिक गतिशील कैसे बना सकता हूं? आईई,

somefunction(data,tupleofnames): 
    (return that each name mapped to a single datum) 

somefunction((1,2,3),(foo,bar,baz))  

और वही है?

+0

क्या इस तरह बताए चर के इस कृत्य है (foo , बार, बाज़ = 1,2,3) कहा जाता है? (foo = 1, बार = 2, baz = 3 असाइन करने के विरोध में)। धन्यवाद! –

+1

हाय @ सिंधुस! इसे 'विनाशकारी असाइनमेंट' कहा जाता है। पाइथन के पास थोड़ी देर के लिए था, और इसे हाल ही में जावास्क्रिप्ट में जोड़ा गया था। – mikemaccana

उत्तर

10

इस बारे में कैसे?

def somefunction(data, tupleofnames): 
    length = len(tupleofnames) 
    for i in range(0, length): 
     globals()[tupleofnames[i]] = data[i] 

यहाँ मुझे लगता है दोनों डेटा और tupleofnames सूची नहीं है जहां tupleofnames स्ट्रिंग की एक सूची है। लेकिन जैसा कि थॉमस ने उल्लेख किया है, यह एक अच्छा अभ्यास नहीं है। यह आसानी से आपके ऐप को दूषित कर सकता है।

+0

कुछ विचार-विमर्श के बाद: जब मैं समझता हूं कि मनमाने ढंग से परिवर्तनीय नामों की तरह क्या लगता है, यह एक बुरा विचार हो सकता है, मुझे यह जवाब पसंद है क्योंकि यह दिखाता है कि यह संभव है (और मेरी रूचि मुख्य रूप से अकादमिक है)। आपके उत्तर के लिए धन्यवाद! – mikemaccana

13

ऐसा करने के तरीके हैं, लेकिन वे अच्छे तरीके नहीं हैं, और इसे पायथन में खराब अभ्यास माना जाता है। जादू द्वारा नए चर नहीं बनाया जाना चाहिए। यदि आप चीजों का संग्रह करना चाहते हैं, तो उचित रूप से एक सूची, शब्दकोश या सेट का उपयोग करें। जिप & नक्शा के लिए बाहर मदद डॉक्स {"foo":1, "bar":2, "baz":3}

3

की जांच:

उदाहरण के लिए, यदि आप एक शब्दकोश लौट सकते हैं। उदा। ज़िप के लिए: -

>>> zip((1,2,3) , ('foo','bar','baz')) 
[(1, 'foo'), (2, 'bar'), (3, 'baz')] 

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

>>> map(None, (1,2,3) , ('foo','bar','baz'))                      
[(1, 'foo'), (2, 'bar'), (3, 'baz')] 
+0

यहां मानचित्र का उपयोग करने का क्या मतलब है? यह वही है जो 'ज़िप' का इरादा है! –

5

यदि शब्दकोश आप जो चाहते हैं वह नहीं हैं, तो संभावित रूप से नामित करने का तरीका है: वे नामित विशेषताओं वाले समूह के कई उदाहरणों के कुशल निर्माण के लिए अनुमति देते हैं।

http://docs.python.org/library/collections.html#collections.namedtuple

from collections import namedtuple 


mytype = namedtuple("mytype", "foo bar baz") 

a = mytype(1,2,3) 
a.foo 
1 
a.bar 
2 
a.baz 
3 
5

आप इस तरह यह कर सकते हैं:

(foo, bar, baz) = (1, 2, 3) 
+1

और फिर भी '(foo, bar, baz) = [कोई नहीं] * 3' – Tjorriemorrie

+1

यह प्रश्न में कोड की पहली पंक्ति के लिए कार्यात्मक रूप से समान रूप से प्रतीत होता है, और निश्चित रूप से गतिशील चर नाम शामिल नहीं है - क्या आपने भी पढ़ा प्रश्न निकाय का कोई हिस्सा, या सिर्फ शीर्षक? या क्या मैं कुछ न कुछ भूल रहा हूं? – Dukeling

-1

मैं ऊपर उत्तर समझने में कर रहे हैं पहले से ही सब वे की जरूरत है, लेकिन मैं एक अच्छा शांत प्रोग्रामिंग चाल है कि कर सकता है जब आप चर के लिए एक विशेष tuple असाइन करना चाहते हैं तो भी आपकी मदद करता है।

टपल टी

टी = (ए, बी, सी)

चर

var1, var2, var3 = टी

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