作为一门语言,Python 是不是因为没有 end 语句而受到限制?

Posted

技术标签:

【中文标题】作为一门语言,Python 是不是因为没有 end 语句而受到限制?【英文标题】:As a language, is Python limited due to no end statement?作为一门语言,Python 是否因为没有 end 语句而受到限制? 【发布时间】:2012-10-31 23:08:02 【问题描述】:

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

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

例如,it appears by a post directly from Guido 表示由于 Python 没有终止 end / 符号而缺少多行 Lamba?

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


更新:

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

【问题讨论】:

***.com/questions/1233448/… 原则上,一个 lambda 可以有一个任意长的表达式列表,所以我不明白它为什么会受到限制...... 这个问题不是关于 Lamba 的,而是关于“由于语言设计决定使用缩进,python 有哪些限制” 【参考方案1】:

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

例子:

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

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

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

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

【讨论】:

有一些限制,例如必须是单个表达式,并且不能包含任何关键字。 @PaoloMoretti 扮演魔鬼的拥护者 - 我认为“不能包含任何关键字”的措辞不太正确...test = lambda L: 3 if L % 2 and L > 15 == 0 else 7... @glglgl 您的“答案”没有回答我的问题。您专门与 Lamda 交谈,我的问题是“当一种语言被设计为使用缩进来具有块意义时存在哪些语言限制” 限制不是语言限制,而是 lambda 限制。 @glgl 我认为关键在于,由于 Python 使用物理缩进来确定语句的分组(而不是大括号或开始/结束关键字),因此基本上不可能找到一种 Python 的方式来表达 multi -line(即多语句)匿名函数。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

而且你不应该这样做。曾经。

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

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

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

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

以上是关于作为一门语言,Python 是不是因为没有 end 语句而受到限制?的主要内容,如果未能解决你的问题,请参考以下文章

python介绍

python特点和优点

为什么要学习Python?学习Python可以做什么?

关于学习python的一点小建议

Python是一门“脚本语言”吗?

如何快速掌握一门语言