機能内部1ICHI.PRO機能内部1今回は、関数のあまり馴染みのない機能を掘り下げ、さらに分解して、そのバイトコードを最初に確認します。最後の部分は、我々は関数が引数として渡すことができる方法を見てきましたし、戻り値として受け取った、とどのようにこれはデコレータのようなかなり洗練されたユーティリティを構成するために働くことができます。今回は、Pythonオブジェクトとしての関数を詳しく見て、何がそれらを動かしているのかを理解します。何よりもまず、関数を定義してその属性を確認するだけです。x2先に進む前に__doc__、少しもう一度お話ししたいと思います。退屈なドキュメントのためだけにあることは知っていますが、そうである必要がありますか?つまり、結局のところ、それは文字列であり、その署名のすぐ下にあるという理由だけで関数に関連付けられています。それでもっとクールなことができますか?ええと、デイブ・ビーズリーは間違いなくできます。彼のPLY解析ライブラリを使用するとt_、名前が。始まり、値が正規表現であるトークンの束を定義するだけで、トークナイザーを作成できます。t_NUMBER.__doc__'\d+'ソフトウェア設計については、ソリューションとプラットフォームについて詳しく説明しますが、それまでの間、ソリューションは特定のニーズに対応することを目的としていると言えば十分です。人間は未来を予測するのが苦手なことで有名なので、解決策は「狭すぎる」、または「ひいきにする」ために失敗することがよくあります。なく、すべての人に適しているわけではありません。補完的なアプローチは、プラットフォームのアプローチです。優れたインフラストラクチャ、より優れたツールを構築して、予測できない未来が到来したときに、その準備が整うようにします。簡単に言えば、それは魚対釣り竿についてです。3がアノテーションを導入したとき、何もしない重要で構文上の下位互換性のない機能に誰もが驚いたことを想像してみてください。真剣に—次のように、関数のパラメーターと戻り値に追加情報をタグ付けすることができます。'\d+'}コード多くの場合、コンパイルされた言語とインタープリター言語の違いについて話すことから基本的なPythonコースを開始することを好みます。コンパイルされた言語は、ソースコードからバイナリ実行可能ファイルに変換され、コンパイルされた特定のオペレーティングシステムでネイティブに実行されます。解釈されたものはソースコードのままで、インタプリタプログラム(通常はそれ自体でコンパイルされます)に渡され、行ごとに評価されます。したがって、インタープリター型言語はより動的でクロスプラットフォームですが、「エミュレーション」のレベルが高いために速度が低下する傾向があり、エラーの多くは実行時にキャッチされます。これはリスクが高くなります。Pythonはインタープリター型言語であり、バイナリ実行可能ファイルpythonはそのインタープリターです。真実は、それは中間のどこかにあります。Python実行の最初のステップは、実際にはコンパイルであり、ソースコードをいわゆるバイトコードに変換します。これは、Pythonインタープリターが実際に実行するものです。このバイトコードは、それが何であるか疑問に思ったことがある場合は、.pycファイルまたは__pycache__ディレクトリに保存されることがありますが、自分で作成することもできます。'print')同様に、コードが名前を参照する場合は常に、インデックスの、yなどの名前を操作する命令を使用します。これは、に解決されます。STORE_NAME1'y'しかし、無限に柔軟なPythonが、せいぜい1つの引数しか処理しない基本的な操作のリストとどのように同等になるのでしょうか。実際、Pythonインタープリターは、もう1つ、LIFO(後入れ先出し)スタックに基づく単純なメモリモデルを使用します。