2013-05-15 12 views
12

मैं अनुक्रम से फोन नंबरों के सेट को अनपैक करने का प्रयास कर रहा हूं, बदले में पाइथन खोल एक अमान्य वाक्यविन्यास त्रुटि फेंकता है। मैं अजगर 2.7.1 का उपयोग कर रहा हूँ। यहां स्निपेटअमान्य वाक्यविन्यास पायथन तारांकित अभिव्यक्ति

>>> record = ('Dave', '[email protected]', '773-555-1212', '847-555-1212') 
>>> name, email, *phone-numbers = record 
SyntaxError: invalid syntax 
>>> 

कृपया समझाएं। क्या ऐसा करने का कोई और तरीका है?

उत्तर

12

यह नया वाक्यविन्यास introduced in Python 3 था। इसलिए, यह अजगर में त्रुटि बढ़ा देंगे 2.

संबंधित पीईपी: PEP 3132 -- Extended Iterable Unpacking

name, email, *phone_numbers = user_record 

अजगर 3:

>>> a, b, *c = range(10) 
>>> a 
0 
>>> b 
1 
>>> c 
[2, 3, 4, 5, 6, 7, 8, 9] 

अजगर 2:

>>> a, b, *c = range(10) 
    File "<stdin>", line 1 
    a,b,*c = range(10) 
     ^
SyntaxError: invalid syntax 
>>> 
15

आप अजगर का उपयोग कर रहे पायथन 2 में 3 विशिष्ट वाक्यविन्यास 2.

के लिए

* वाक्य रचना विस्तारित iterable कार्य में खोल नहीं पायथन 2.

में उपलब्ध Python 3.0, new syntax और PEP 3132 देखें है।

* सूचक तर्क खोल अजगर 2 में समान व्यवहार अनुकरण करने के लिए के साथ एक समारोह का उपयोग करें:

def unpack_three(arg1, arg2, *rest): 
    return arg1, arg2, rest 

name, email, phone_numbers = unpack_three(*user_record) 

या का उपयोग सूची टुकड़ा करने की क्रिया।

7

कार्यक्षमता अजगर 3 में ही उपलब्ध है यही कारण है, एक विकल्प है:

name, email, phone_numbers = record[0], record[1], record[2:] 

या कुछ की तरह:

>>> def f(name, email, *phone_numbers): 
     return name, email, phone_numbers 

>>> f(*record) 
('Dave', '[email protected]', ('773-555-1212', '847-555-1212')) 

लेकिन वह सुंदर hacky IMO

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