为何Python不支持在句点上隐式换行?
有没有什么原因导致Python不允许在句号前后进行隐式换行?也就是说,
data.where(lambda d: e.name == 'Obama').
count()
data.where(lambda d: e.name == 'Obama')
.count()
这样做会和Python的某些特性冲突吗?随着方法链API的兴起,这似乎是个不错的功能。
6 个回答
1
不太确定句号后的情况,但在你的例子中,句号前的换行符让第一行可以单独成为一个有效的语句。这样一来,Python就得查看第二行,才能判断第一行是否真的是一个语句。
在定义语言语法时,其中一个目标就是让它能够被解析,而不需要像这样去提前查看,避免产生歧义。
如果在交互式解释器中,每一行后都得按两次回车,才能让Python知道你已经完成了语句,并且不会在后面加上.foo()
,那就会很烦人。
3
在Python中,如果你在括号内,可以把一行代码分成多行写,这样更容易阅读。所以你可以试试这样:
(data.where(lambda d: e.name == 'Obama').
count())
我知道这并没有直接回答你的问题(“为什么?”),但希望这对你有帮助。
6
这两种情况都可能产生有效且完整的结构,所以继续处理它们会让解析器变得更加复杂。
print 3.
1415926
print 'Hello, world'
.lower()