2012-04-03 11 views

उत्तर

13

कोष्ठकों कि समारोह कॉल ऑपरेटर के रूप में अंदर, अल्पविराम नहीं tuples के निर्माण के लिए है, लेकिन तर्क अलग करने के लिए। इस प्रकार, type(3,)type(3) के बराबर है। व्याकरण द्वारा तर्क सूची के अंत में एक अतिरिक्त कॉमा की अनुमति है। आप एक टपल निर्माण करने के लिए कोष्ठक की एक अतिरिक्त जोड़ी की जरूरत है:

>>> def f(x): 
...  print x 
... 
>>> f(3) 
3 
>>> f(3,) 
3 
>>> f((3,)) 
(3,) 
6

बिल्टिन type() एक फ़ंक्शन है, इसलिए कॉमा को टुपल कन्स्ट्रक्टर की बजाय तर्क विभाजक के रूप में पार्स किया जा रहा है।

>>> type(3,) 
<type 'int'> 

>>> type((3,)) 
<type 'tuple'> 
+1

चाहे कितने तर्क 'f' लेते हैं, कोमा को तर्क विभाजक के रूप में पार्स किया जाएगा। –

+0

आप सही हैं - मैंने अभी पुष्टि की है कि मेरे अंत में। संपादित करेंगे –

2

मुझे लगता है अजगर समारोह बहस में पीछे अल्पविराम पर ध्यान नहीं देता:

def f (a): 
    print a 
    print type(a) 

>>> f(3,) 
3 
<type 'int'> 

कोष्ठकों कॉमा द्वारा विभाजित मान का उपयोग करते हुए एक टपल बनाने के लिए एक है चाल जो हर जगह काम नहीं करती है। सूची comprehensions एक अच्छा उदाहरण है:

>>> [a,a*2 for a in range(4)] 
    File "<stdin>", line 1 
    [a,a*2 for a in range(4)] 
      ^

आप ऐसा करने के लिए है:

>>> [(a,a*2) for a in range(4)] 
[(0, 0), (1, 2), (2, 4), (3, 6)] 

सूची unpacking, ठीक काम करता है, हालांकि, तो यह एक सा चर जहां असीम, कॉमा द्वारा विभाजित मान अनुमति दी जाती है है:

>>> [(a,b) for a, b in zip(range(4),range(4))] 
[(0, 0), (1, 1), (2, 2), (3, 3)] 
0

func(bunch_of_args) में आप एक अल्पविराम से पिछले आर्ग पालन करने के लिए अनुमति दी जाती है सिर्फ

में की तरह
alist = [1, 2, 3, ] 
संबंधित मुद्दे