6

Python はタブ間隔を使用してスコープを示すため (そのためend}シンボルはありません)、特定の機能を持つことから何らかの形で言語を制限しますか?

注: 私はコーディング スタイルに関する個人的な好みについて話しているのではなく、endステートメントがないことの直接的な結果としての実際の言語の制限について話しているのですか?

たとえば、Guido からの直接の投稿endでは、 Python に終了}記号がないために複数行のラムバが不足しているように見えますか?

もしそうなら、インデントを使用するというこの言語設計の決定により、他にどのような Python 制限がありますか?


アップデート:

この質問は Lambda に関するものではなく、技術的にも Python 自体に関するものではないことに注意してください。それはプログラミング言語の設計に関するものです...そして、ブロックスコープを表す(endステートメントではなく)インデントを持つように設計されている場合、プログラミング言語にはどのような制限がありますか。

4

4 に答える 4

13

end/の欠落はありません}。終了は、前の深さへの「くぼみ」によって表されます。したがって、いかなる方法でも制限はありません。

例:

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

「begin」は、インデント レベルの増加に対応します (after while、 after if)。

「終了」は、インデント レベルの減少に対応します (それぞれprint()の s の後)。

を省略するprint("y")と、最上位レベルまでの「くぼみ」があり、これは 2 つの連続する「端」を持つことに相当します。

于 2012-11-12T14:12:27.527 に答える
2

この質問に対する答えは、シンタックス シュガーと言語スタイルの間のどこかにあります。つまり、問題をどのようにエレガントに表現し、言語哲学に準拠させるかということです。チューリング完全な言語、アセンブリ言語や C (ラムダのサポートがまったくないことは明らか) でさえ、問題を解決する可能性があります。Lambda では、標準の関数定義を使用してステートメント化することもできる、別の (関数型言語の観点から見るとおそらくよりエレガントな) 言い回しが可能です。したがって、ここでは、別の方法でコーディングする必要があること以外の制限は認識できません。

于 2012-11-12T15:11:04.733 に答える
0

最大の制限の 1 つ (そう呼ぶ場合) は、同じプログラム内でタブとスペースを使用できないことです。

そして、あなたはすべきではありません。これまで。

おそらくPythonソースファイルを解析するとき(解釈ではなく解析)を除いて、明らかな構造上の制限はありません:

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

これは完全に正当な Python コードですが、ファイルを解析するときに、コメントがどのインデント レベルに属しているかを判断しようとして問題が発生する場合があります。

于 2012-11-12T14:36:17.957 に答える