2012-10-22 10 views
16

मैं बस अपना अजगर दुभाषिया: कार्यक्रम की मार डाला:पायथन 0 से शुरू होने वाली संख्या स्ट्रिंग को संभाल नहीं सकता है क्यों?

>>> def mylife(x): 
...  if x>0: 
...    print(x) 
...  else: 
...    print(-x) 
... 
>>> mylife(01) 
File "<stdin>", line 1 
mylife(01) 
     ^
SyntaxError: invalid token 
>>> mylife(1) 
1 
>>> mylife(-1) 
1 
>>> mylife(0) 
0 

अब, मैं this देखा है लेकिन के रूप में लिंक कहते हैं, 0 अष्टाधारी के लिए अजगर में किसी भी अधिक काम नहीं करता है (यानी python3 में काम नहीं करता)। लेकिन क्या इसका मतलब यह नहीं है कि 0 से शुरू होने वाली संख्याओं के व्यवहार को ठीक से व्याख्या किया जाना चाहिए? या तो बेस -2 में या सामान्य आधार -10 प्रतिनिधित्व में? चूंकि ऐसा नहीं है, पाइथन ऐसा क्यों व्यवहार करता है? क्या यह एक कार्यान्वयन मुद्दा है? या यह एक अर्थपूर्ण मुद्दा है?

उत्तर

25

मेरा अनुमान है कि 012 अब python3.x में एक ऑक्टल शाब्दिक स्थिरांक नहीं है, इसलिए उन्होंने अजीब पिछड़ा संगतता बग से बचने के लिए 012 वाक्यविन्यास को अस्वीकार कर दिया। अपने python2.x स्क्रिप्ट जो अष्टाधारी शाब्दिक स्थिरांक उपयोग करने पर विचार:

a = 012 + 013 

तो फिर तुम यह अजगर से 3 बंदरगाह और यह अभी भी काम करता है - यह सिर्फ आप a = 25 बजाय a = 21 देता है के रूप में आप पहले से उम्मीद (दशमलव)। उस बग को ट्रैक करने में मज़ा लें।

+0

यूप संभव डिजाइन निर्णय के रूप में, एक अच्छी व्याख्या की तरह लगता है। दो साल बाद हो सकता है, जब अधिकांश सामानों को बंद कर दिया गया है, तो मुझे लगता है कि सुविधा को दोबारा अनुमति दी जानी चाहिए। धन्यवाद! –

+12

"प्रोग्रामर क्रिसमस और हेलोवीन को भ्रमित क्यों करते हैं" - "क्योंकि dec (25) oct (31)" है; पी –

+0

@ जोन क्लेमेंट्स - मैंने पहले कभी नहीं देखा - काफी चालाक - मुझे लगता है कि शायद मैंने कभी सीएस कक्षाओं में से एक में उल्लेख नहीं किया था। – mgilson

10

अजगर 3 रिलीज से नोटों http://docs.python.org/3.0/whatsnew/3.0.html#integers

ऑक्टल शाब्दिक रूप 0720 के नहीं रह रहे हैं; इसके बजाय 0o720 का उपयोग करें।

Python 2.7.3 
>>> 010 
8 

अजगर 3.x में यह एक सिंटैक्स त्रुटि है के रूप में आप की खोज की है:

'शून्य अग्रणी' अजगर 2.x में अष्टाधारी शाब्दिक वाक्य विन्यास को एक आम पकड़ लिया था

Python 3.3.0 
>>> 010 
    File "<stdin>", line 1 
    010 
    ^
SyntaxError: invalid token 

आपको इसी हमेशा की तरह पहले शून्य तार से परिवर्तित कर सकते हैं:

>>> int("010") 
10 
संबंधित मुद्दे

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