ホームページ >バックエンド開発 >Python チュートリアル >なぜ Python に pass ステートメントがあるか知っていますか?

なぜ Python に pass ステートメントがあるか知っていますか?

coldplay.xixi
coldplay.xixi転載
2020-10-30 16:54:062464ブラウズ

Python ビデオ チュートリアル コラムでは、Python に pass ステートメントが必要な理由を紹介します。

なぜ Python に pass ステートメントがあるか知っていますか?

Python の pass ステートメントについては、見た目は簡単 (わずか 4 文字) で、プログラミング経験のない初心者でも使用方法を学ぶことができます。素早く。

公式ドキュメントの紹介は非常にシンプルで、次の 3 つの例を見ると使い方がすぐにわかります:

なぜ Python に pass ステートメントがあるか知っていますか?

簡単に言うと、 pass は null 操作であり、インタプリタが実行すると、構文が正しいかどうかをチェックしてスキップする以外は何もしません。

return、break、 continue、yield などの空でない操作と比較した最大の違いは、プログラムの実行順序を変更しないことです。これは私たちが書くコメントに似ていますが、コード行を占有し、それが配置されているスコープには影響を与えません。

ただし、他の言語の基礎がある場合は、次のような疑問が生じるかもしれません。なぜ Python にはこのような独自の pass ステートメントがあるのに、他の言語には存在しないのでしょうか?

Python はなぜこのように設計されているのでしょうか?

それは、ほとんどのプログラミング言語が直面する共通の問題を解決するためのものでしょうか、それとも、独自の新しい発見があるために作成された新機能でしょうか?

言い換えると: なぜ Python には pass ステートメントがあるのか​​、それがあればどのような問題が解決されるのか (利点)、そしてそれがないとどのような問題 (欠点) が生じるのでしょうか?

次に、この記事では 2 次元から分析します。

1. 人々へ: スペースのプレースホルダーとして

#私はこれを、コメントするための簡潔かつ包括的な方法だと考えています。これは、「

最初にここの場所を予約してから、それから」と言うのと同じです。後で戻ってきてください。「 を実装するための特定のコードを入力してください。」

たとえば、多層の if-elif-else 構造では、最初に判定条件を記述し、次に対応するブロックに pass を記述し、後で徐々に改善することができます。

たとえば、上記の例では、最初にクラス/関数名とその入力パラメーターを記述し、次にメイン コードをスキップ (渡し) し、後でゆっくりと入力することができます。

pass は書きやすく、キーワードなので IDE で色分けが目立つため、コメントを書くよりも便利です。

パス スペースのプレースホルダーとして、主にローカル コード構造を考えるのを容易にし、特定の補助的なリマインダー効果があります。

ただし、コメントの書き方としては「# todo: xxxx」と書くのと比べると細すぎて劣りますが、後者のほうがIDE上でも色付きで強調表示され、意味が明確になります。書くのは簡単ですが、一見冗長に見えるキーワード パスも導入しています。

したがって、スペース プレースホルダーの観点から見ると、パスはプログラミング言語に必要な設計要素ではありません。

これを使用すると、「ここに何かがありますが、今はスキップします」というセマンティクスを表現できますが、それがないと、アノテーション コンテンツに置き換えられてしまう可能性があります。

2. マシンの場合: 文法上の整合性のために

前の項目の使用法では、コード内で pass が出現する位置は理論的には制限がありません。

ただし、パスを最も頻繁に使用するときは、基本的にコロンの次の行にあり、このレベルのインデントされたコード ブロックにはこの 1 つのステートメントのみがあります。 (前の 3 つの例を参照してください。便宜上、空の関数のみを例として取り上げます)

これを記述しなかった場合に何が起こるか想像できますか?

答えは、インデント エラーが報告されるということです:

IndentationError: Expected an indented block

# 将函数体的 pass 去除,会报错def func():func()复制代码
Python はコード ブロックを分割するためにインデントを使用するため (理由については、 「Python がコード ブロックを分割するためにインデントを使用する理由」を参照してください。コロンは新しいインデントされたコード ブロックの外観を示しているため、この例ではインデントされたコード ブロックの欠落を報告します。

代わりに上記のコメントを使用するとどうなるでしょうか?

# 将函数体的 pass 换成注释def func():
    # todo:此处有东西,以后补上func()复制代码
このように書くとエラーも報告されます:

IndentationError: インデントされたブロックが必要です

理由は、コメントが有効な文法的な内容ではないため、無視されます。 「有効な構文内容ですがスキップされる」 pass ステートメントとは異なり、Python インタプリタ (無視) によって実行されます。

つまり、インデントされたコード ブロックには文法的に意味のあるコンテンツが含まれている必要があります。次の例が有効です:

def func():
    """这是一个字符串"""def func2():
    123456复制代码
Python 関数を定義するときは、関数本体を含める必要があります。宣言セマンティクスと定義セマンティクスの両方。

void test(); と記述される宣言セマンティクスのみを使用できる一部の言語とは異なります。

ただし、Python は中括弧を使用しないため、一部の言語のように、

void test(){} として記述される空の関数を直接定義できません。

上記の分析に基づくと、Python は空の関数を定義するときに正当な関数本体を持たなければならないため、 pass ステートメントは no-op を表すように設計されています。これは構文を完成させることを目的としており、コロンとともに、他の言語における空の中括弧のペアに相当します。

文法上の整合性の観点から、これは必要な設計要素ですが、それが利用できない場合は、同様の空のステートメントまたは特殊記号に置き換える必要があります。

人間の場合、パスは「一時的にスキップ」を意味します。一時的なプレースホルダーとして、最終的には実際のコード実装に置き換えられます。マシンの場合、「直接スキップ」を意味します。」は完了するためにのみ使用されます。文法ロジックであり、他のコードに置き換えられることはありません。

他の言語には、この種のプレースホルダーを表す特別なステートメントや記号はありません (つまり、セマンティクスが欠如しています) が、文法の整合性を完全にするためにわざわざキーワードを設計する必要はありません。 (つまり、文法的に完全です)。

この記事の冒頭の質問に戻ります: なぜ Python には pass ステートメントがあるのか​​、それがあればどのような問題が解決できるのか (利点)、それがないとどのような問題が生じるのか (欠点)?

Python は pass ステートメントを使用して、純粋に操作のないコード ブロック (空の関数、空のクラス、空のループ制御ブロックなど) をサポートします。これを使用すると、追加の式を作成できます。プレースホルダーセマンティクスを使用します。

前者はマシン用であり、他の言語の空中括弧の機能と同等で必ず存在する必要があります。後者は人間用であり、必須ではなく、コメントで表現できます。このステートメントは Python によって設計されており、この使用法は非常に便利な場合があります。

関連する無料学習の推奨事項: Python ビデオ チュートリアル

以上がなぜ Python に pass ステートメントがあるか知っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。