6

由于 Python 使用制表符间距来指示范围(因此没有符号),这是否end}以任何方式限制语言具有特定功能?

注意:我不是在谈论个人对编码风格的偏好,我是在谈论由于没有end声明而直接导致的实际语言限制?

例如,直接来自 Guido 的帖子显示由于 Python 没有终止end/}符号而缺少多行 Lamba?

如果是这样,由于这种语言设计决定使用缩进,还有哪些其他 Python 限制?


更新:

请注意,这个问题与 Lambda 和技术上无关,甚至与 Python 本身无关。这是关于编程语言设计......当编程语言被设计为具有缩进(与结束语句相反)表示块范围时,它有什么限制。

4

4 回答 4

13

不乏end/ }:结束由对先前深度的“凹痕”表示。所以没有任何限制。

例子:

x = 123
while x > 10:
    if x % 21:
        print("x")
    print("y")
print("z")

“开始”对应于缩进级别的增加(之后while,之后if)。

“结束”对应于缩进级别的降低(在相应print()的 s 之后)。

如果省略print("y"),则在最顶层有一个“缩进”,对应于有两个连续的“结束”。

于 2012-11-12T14:12:27.527 回答
2

这个问题的答案介于句法糖和语言风格之间,即如何优雅地表达问题并符合语言哲学。任何图灵完备的语言,甚至是汇编语言和 C——肯定缺乏任何 lambda 支持——都可以解决任何问题。Lambda 只允许使用标准函数定义也可声明的内容的不同(如果从函数式语言的角度来看可能更优雅)的措辞。因此,除了必须以不同方式编码之外,我无法认识到这里的限制。

于 2012-11-12T15:11:04.733 回答
0

最大的限制之一(如果你这么称呼的话)是你不能在同一个程序中使用制表符和空格。

你不应该。曾经。

没有明显的结构限制,除非在解析 python 源文件时(解析,而不是解释):

def foo(bar):
        # If bar contains multiple elements
    if len(bar) > 1:
            return bar

这是完全合法的 Python 代码,但是,在解析文件时,您可能会在试图找出注释所属的缩进级别时遇到麻烦。

于 2012-11-12T14:36:17.957 回答
0

“限制”是什么意思?您的意思是 Python 无法执行其他语言可以执行的计算吗?在那种情况下,答案肯定是否定的。Python 正在图灵完备

您的意思是缺少 end 语句会改变 Python 中计算的表达方式吗?在这种情况下,答案是“大部分不是”。你必须明白 Python 的 dedent一个 end 语句;它是解释器识别为块结尾的字节序列。

然而,正如其他人所提到的,当涉及到内联函数(Python 的 lambda)时,使用缩进来表示块是很尴尬的。这意味着 Python 程序的风格可能与 JavaScript 略有不同,例如(通常编写大型内联函数)。

话虽如此,许多语言甚至一开始就没有内联函数,所以我不会将此称为限制。

于 2013-11-07T22:46:54.780 回答