2010-12-01 10 views
2

Gibt es einen Grund, warum Python keine impliziten Zeilenweiterleitungen nach (oder vor) Perioden erlaubt? Das istWarum nicht Python implizite Zeilenfortsetzung auf Zeitraum?

data.where(lambda d: e.name == 'Obama'). 
    count() 


data.where(lambda d: e.name == 'Obama') 
    .count() 

Gibt es Konflikte mit einigen Features von Python? Mit dem Aufkommen von APIs zur Methodenverkettung scheint das ein nettes Feature zu sein.

+1

Weil. [Leider gibt es eine Mindestlänge von 15 Zeichen, daher kann ich meinen Kommentar nicht kurz und knapp sagen. Schau, was ich jetzt gemacht habe. Schrecklich.] –

+0

'import this' sagt" Explizit ist besser als implizit. " –

Antwort

6

Diese beiden Situationen können zu gültigen, vollständigen Konstrukten führen, so dass der Parser dadurch komplizierter wird, wenn Sie fortfahren.

print 3. 
    1415926 

print 'Hello, world' 
    .lower() 
+0

Wie ist '.lower()' an sich ein gültiges, vollständiges Konstrukt? –

+0

Es ist nicht. Aber 'print 'Hallo, world'' ist. –

2

Python erlaubt Linie Fortsetzungen innerhalb Parenthesen(), so dass Sie vielleicht versuchen:

(data.where(lambda d: e.name == 'Obama'). 
    count()) 

Ich weiß, das ist Ihre Frage nicht beantworten, aber es ist vielleicht hilfreich („Warum?“).

0

Verwenden Sie ein '\' am Ende. (Sieht zwar hässlich)

data.where(lambda d: e.name == 'Obama').\ 
    count() 
1

Nicht sicher nach Zeiten, aber in Ihrem Beispiel der Newline vor einer Periode führen zu der ersten Zeile eine gültige Aussage über seine eigenen zu sein. Dann müsste Python in die zweite Zeile schauen, um zu wissen, ob die erste Zeile eine Aussage war oder nicht.

Eines der Ziele bei der Definition der Sprachsyntax bestand darin, sie analysieren zu können, ohne Unklarheiten zu haben, die einen Blick nach vorn erfordern.

Es würde im interaktiven Interpreter ärgerlich werden, wenn Sie zweimal nach jeder einzelnen Zeile die Eingabetaste drücken müssten, nur damit Python wusste, dass Sie Ihre Aussage beendet haben und keine .foo() hinterlegen würden.

0

In den Fällen, in denen eine Periode, in zu einem Methodenaufruf wurden führenden könnte, wird es immer (?) Fehler eine Syntax sein, damit es am Ende einer Linie von selbst kommt nur zu. Es wäre also eindeutig, es als Fortsetzung zu lesen.

Allerdings führt Python im Allgemeinen keine Zeile weiter, nur weil dort ein unvollständiger binärer Operator ist. Zum Beispiel kann die folgende ist nicht gültig: ist

2 + 
    4 

Im zweiten Beispiel wird die erste Zeile allein gültig und es wäre wirklich inkonsequent für Python für eine folgende Zeile zu suchen „für alle Fälle“ gibt es eine .

Ich würde nur nach dem Öffnen des Methodenaufrufs brechen.

0

{Weil Python Zeilenumbrüche verwendet, um Anweisungen zu beenden, unabhängig von geschweiften Klammern oder Semikolossen;}

Verwandte Themen