2010-12-01 6 views
2

ピリオドがピリオド(またはピリオド)の前に暗黙の行継続を許可しない理由はありますか?つまり、なぜピリオド暗黙の行継続しないのですか?

これはPythonのいくつかの機能と競合しますか?メソッド連鎖APIの登場により、これは素晴らしい機能のようです。

+1

です。 [残念ながら、投稿の長さは最低15文字ですので、私は自分のコメントを短くてうれしく思います。それが今私がしたことを見てください。恐ろしいです。] –

+0

'import this'は" Explicitは暗黙的です "と言っています。 –

答えて

6

これらの状況はどちらも、有効で完全な構造につながる可能性があるため、引き続き続けるとパーサーが複雑になります。期間は、メソッド呼び出しの中で有数可能な場合には

print 3. 
    1415926 

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

'.lower()'はそれ自体が有効で完全な構造体とはどうですか? –

+0

そうではありません。しかし、「プリントは、こんにちは、世界」です。 –

2

は、Pythonはparentheticals()内の行の継続を許可するので、あなたは試してみてください:(「なぜ?」)

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

私はそれがあなたの質問に答えていないけど、多分それは便利です。

0

最後に「\」を使用してください。 (ただし醜い)期間の後にわから

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

はないが、あなたの例では、期間前に改行が独自に有効な文である最初の行につながります。そしてPythonは、最初の行が文であるかどうかを知るために、2行目を先読みする必要があります。

言語構文を定義するときの目標の1つは、先読みを必要とするあいまいさを伴わずに解析できることでした。

対話型インタプリタで迷惑になるのは、1行ごとに2回Enterキーを押すだけで、Pythonは文を完成させることが分かり、そのあとに.foo()を置くつもりはないということです。

0

それだけで単独行の末尾に発生するため、それは常に(?)シンタックスエラーになります。それで、それを継続を開始するものとして読むことは、あいまいではないでしょう。

しかし、Pythonは一般的に、そこに不完全なバイナリ演算子があるため、行を続行しません。たとえば、次は有効ではありません。2番目の例では

2 + 
    4 

、最初の行は、それ自体で有効であり、Pythonは「念のため」次の行を探しすることは本当に矛盾だろうものがあります。

私は、メソッド呼び出しの開始括弧の後に改行します。

0

{中括弧やセミコリンによらず、末尾の文に改行を使用しているため}

関連する問題