2013-05-14 6 views
15

कभी-कभी कुंजी शब्दों के पहले और बाद में रिक्त स्थान क्यों छोड़े जा सकते हैं? उदाहरण के लिए, अभिव्यक्ति 2if-1e1else 1 मान्य क्यों है?पायथन को हमेशा कीवर्ड के चारों ओर रिक्त स्थान की आवश्यकता क्यों नहीं होती है?

$ python2 
Python 2.7.3 (default, Nov 12 2012, 09:50:25) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 2if-1e1else 1 
2 

$ python3 
Python 3.3.0 (default, Nov 12 2012, 10:01:55) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 2if-1e1else 1 
2 

और यहां तक ​​कि PyPy में:

दोनों CPython 2.7 और 3.3 में काम करने के लिए लगता है

identifier ::= (letter|"_") (letter | digit | "_")* 

इसलिए, 2if: अजगर में

$ pypy 
Python 2.7.2 (341e1e3821ff, Jun 07 2012, 15:42:54) 
[PyPy 1.9.0 with GCC 4.2.1] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
And now for something completely different: ``PyPy 1.6 released!'' 
>>>> 2if-1e1else 1 
2 
+0

wtf – wim

+0

जो कि perl – jamylak

उत्तर

12

पहचानकर्ता के रूप में वर्णित किया गया है एक पहचानकर्ता नहीं हो सकता है इसलिए यदि 2 होना चाहिए, if इसी तरह की तर्क अभिव्यक्ति के बाकी हिस्सों पर लागू होता है।

मूल रूप से व्याख्या 2if-1e1else 1 (पूर्ण पार्स काफी जटिल हो जाएगा) कुछ इस तरह जाना होगा:

2if नहीं वैध पहचानकर्ता, 2 अंकों digit ::= "0"..."9" से मेल खाता है, if कीवर्ड से मेल खाता। -1e1else, -1की एकल निषेध (u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr) है: (। 1 जो exponentfloat ::= (intpart | pointfloat) | exponent में intpart से मेल खाता है, e1 प्रतिपादक exponent ::= ("e" | "E") ["+" | "-"] digit+ है) आप प्रपत्र Ne+|-x का भाव देख सकते हैं एक नाव पैदावार इस से:

>>> type(2e3) 
<type 'float'> 

तो else कीवर्ड के रूप में देखा जाता है, और -1 आदि ..

आपपर विचार कर सकते हैं इसके बारे में अधिक पढ़ने के लिए।

+0

* "...' -1' मिलान 'intpart' जैसा दिखने लग रहा है ... "* प्रतीक्षा करें, क्या? एक यूनरी ऑपरेटर नहीं है? – Mehrdad

+0

व्याकरण को बस्टिंग करने के लिए यह दिखाने के लिए कि इसे कैसे पार्स किया गया है। अच्छा स्पर्श। – squiguy

+0

@Mehrdad क्षमा करें, संपादन स्पष्ट है? – HennyH

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