2013-05-14 3 views
15

Warum können Leerzeichen manchmal vor und nach Schlüsselwörtern weggelassen werden? Zum Beispiel, warum ist der Ausdruck 2if-1e1else 1 gültig?Warum benötigt Python nicht immer Leerzeichen um Schlüsselwörter?

scheint sowohl CPython 2,7 und 3,3 zu arbeiten:

$ 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 

und sogar in PyPy:

$ 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

das sieht aus wie perl – jamylak

Antwort

12

Identifiers in Python werden beschrieben als:

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

daher 2if kann kein Bezeichner sein, wenn es 2,sein muss. Eine ähnliche Logik gilt für den Rest des Ausdrucks.

Grundsätzlich 2if-1e1else 1 Interpretation so etwas wie dies (die vollständige Analyse wäre ziemlich kompliziert) gehen würde:

2if nicht gültige Bezeichner, entspricht 2 Ziffer digit ::= "0"..."9" Spieler if Stichwort. -1e1else, -1 der unäre Negation (u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr) von : (. 1 die intpart in exponentfloat ::= (intpart | pointfloat) | exponent Spieler e1 ist Exponent exponent ::= ("e" | "E") ["+" | "-"] digit+) Sie Ausdrücke der Form sehen kann Ne+|-x ergibt sich ein Schwimmer dies aus:

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

dann wird das else als das Schlüsselwort gesehen, und -1 etc ..

Sie können dielesen, um mehr darüber zu lesen.

+0

* "...' -1' passt zu 'intpart' ..." * warte, was? Ist "-" kein unärer Operator? – Mehrdad

+0

Die Grammatik durchbrechen, um zu zeigen, wie sie analysiert wird. Schöne Berührung. – squiguy

+0

@Mehrdad Sorry, ist die Bearbeitung klarer? – HennyH

Verwandte Themen