为什么python隐式行继续上一段时间?

时间:2010-12-01 04:11:28

标签: python

是否有任何理由Python在句点之后(或之前)不允许隐式行延续?那是

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


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

这是否与Python的某些功能冲突?随着方法链API的兴起,这似乎是一个很好的功能。

6 个答案:

答案 0 :(得分:6)

这两种情况都可能导致有效的,完整的构造,因此继续使用它们会使解析器复杂化。

print 3.
  1415926

print 'Hello, world'
  .lower()

答案 1 :(得分:2)

Python允许在括号()中继续行,所以你可以尝试:

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

我知道这不是回答你的问题(“为什么?”),但也许它很有帮助。

答案 2 :(得分:1)

在句点之后不确定,但在您的示例中,句点之前的换行符会导致第一行自己成为有效语句。然后Python必须向前看第二行才能知道第一行是否是一个语句。

定义语言语法的目标之一是能够解析它而不会出现需要提前展望的歧义。

如果你必须在每一行之后按两次输入才会让交互式解释器变得烦人,因为Python知道你已经完成了你的陈述并且不会在它之后加上.foo()。 / p>

答案 3 :(得分:0)

最后使用'\'。 (看起来很难看)

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

答案 4 :(得分:0)

在一个句点可能导致方法调用的情况下,它总是(?)是一个语法错误,它只能在一行的末尾发生。因此,将其视为开始延续将是明确的。

但是,Python一般来说不会因为那里有一个不完整的二元运算符而继续使用。例如,以下内容无效:

2 + 
    4

在第二个例子中,第一行本身是有效的,并且对于Python来说,查找以下行“以防万一”是真的不一致。

我只是在方法调用的开始阶段后休息。

答案 5 :(得分:0)

{因为python使用换行符来结束语句,不依赖于大括号或半大小写;}