【问题标题】: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 本身无关。它是关于编程语言设计的......当编程语言被设计成缩进(而不是结束语句)代表块范围时,它有什么限制。

【问题讨论】:

  • 原则上,一个 lambda 可以有一个任意长的表达式列表,所以我不明白它为什么会受到限制......
  • 这个问题不是关于 Lamba 的,而是关于“由于语言设计决定使用缩进,python 有哪些限制”

标签: python coding-style


【解决方案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 稍有不同,例如(通常编写大型内联函数)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多