Python のクロージャについて簡単に説明します
Pythonのクロージャ
数日前に誰かが別のメッセージを残しましたが、そのうちの 1 つがどのように使用されるかわかりません闭包
和re.sub
。 Script Home で検索してみると、クロージャに関することを書いたことがなかったので、Python の内容をまとめて改善することにしました。
1. クロージャの概念
まず、クロージャとは何かという基本的な概念から始める必要があります。 Wiki の説明を見てみましょう:
....
自由変数と関数という 2 つの重要な点については後で説明します。 「クロージャ」の意味についてはまだ詳しく説明する必要がありますが、このパッケージは関数の内部にあることは明らかです。パッケージ内では変数は自由であり、自由な変数はパッケージ内を歩き回ることができます。もちろん、このパッケージが作成されるという前提があります。
例:
ここで func が呼び出されると、クロージャ inner_func が生成され、クロージャは自由変数 name を保持します。つまり、関数 func のライフサイクルが終了しても変数名はまだ存在することを意味します。閉じた場合、リサイクルされません。
さらに、クロージャは Python 固有の概念ではありません。関数を第一級市民として扱うすべての言語にはクロージャの概念があります。ただし、クロージャは、クラスが第一級市民である Java のような言語でも使用できますが、クラスまたはインターフェイスを使用して実装する必要があります。
より概念的なことについては、最後にある参考リンクを参照してください。
2. クロージャーを使用する理由
上記の紹介に基づいて、読者はこれがクラスに似ていると感じられるでしょうか。類似点は、どちらもデータのカプセル化を提供することです。違いは、クロージャ自体がメソッドであることです。クラスと同様に、プログラミングの際に (もちろん、現実世界、つまりビジネスのモデル化も同様に) 共通の機能を再利用するために、共通のものをクラスに抽象化します。クロージャについても同様です。関数の詳細な抽象化が必要な場合は、クロージャが適しています。
この時点では、クロージャは読み取り専用オブジェクトとして理解できますが、プロパティを渡すことはできますが、提供できるのは実行インターフェイスのみです。したがって、プログラムでは、後で説明するデコレータなどの共通関数を完了するために、このような関数オブジェクト (クロージャ) が必要になることがよくあります。
3. クロージャを使用する
最初のシナリオは、Python の非常に重要で一般的な使用シナリオです。Python は、デコレーターに非常に使いやすい「構文糖体」を提供します。これにより、デコレーターを非常に便利に使用できるようになります。つまり、関数 func に @decorator_func を追加すると、decorator_func(func):
と同等になります。このデコレータの例では、クロージャ (ラッパー) は外部 func パラメータを保持し、受け入れられたパラメータはそのまま func に渡され、実行結果が返されます。
これは簡単な例ですが、もう少し複雑な場合は、頻繁に使用される LRUCache デコレータなどの複数のクロージャを使用できます。デコレータは @lru_cache(expire=500) のようなパラメータを受け入れることができます。実装は 2 つのクロージャーのネストです:
クロージャについてあまり知らない学生でも、上記のコードは理解できるはずです。これは、以前のインタビューでよく聞かれた質問です。
2 番目のシナリオは、クロージャーの機能「遅延評価」に基づいています。このアプリケーションは、データベースにアクセスするときによく使用されます。例:
上記の不適切な例は、クロージャによる遅延評価の関数を示していますが、上記のクエリによって返される結果は関数ではなく、関数関数を備えたクラスです。興味があれば、Django のクエリセットの実装を見てください。原理は同様です。
3 番目のシナリオは、関数のパラメーターを事前に割り当てる必要がある場合です。もちろん、Python には functools.parial にアクセスするための優れた解決策がありますが、クロージャーを使用して実現することもできます。
これも突飛な例のように思えますが、クロージャの実用的な応用とみなすことができます。
最後に、クロージャは理解しやすく、Python で広く使用されています。ご質問があれば、メッセージを残してください。
4.参考文献
ウィキペディア - 閉鎖
http://stackoverflow.com/questions/4020419/closures-in-python
http://www.shutupandship.com/2012/01/python-closures-explained.html
http://stackoverflow.com/questions/141642/what-limitations-have-closures-in-python-compared-to- language-x-closures
http://mrevelle.blogspot.com/2006/10/closure-on-closures.html

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

CentOSシステムでのPytorchモデルの効率的なトレーニングには手順が必要であり、この記事では詳細なガイドが提供されます。 1。環境の準備:Pythonおよび依存関係のインストール:Centosシステムは通常Pythonをプリインストールしますが、バージョンは古い場合があります。 YumまたはDNFを使用してPython 3をインストールし、PIP:sudoyumupdatepython3(またはsudodnfupdatepython3)、pip3install-upgradepipをアップグレードすることをお勧めします。 cuda and cudnn(GPU加速):nvidiagpuを使用する場合は、cudatoolをインストールする必要があります

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

CentOSでPytorchバージョンを選択する場合、次の重要な要素を考慮する必要があります。1。CUDAバージョンの互換性GPUサポート:NVIDIA GPUを使用してGPU加速度を活用したい場合は、対応するCUDAバージョンをサポートするPytorchを選択する必要があります。 NVIDIA-SMIコマンドを実行することでサポートされているCUDAバージョンを表示できます。 CPUバージョン:GPUをお持ちでない場合、またはGPUを使用したくない場合は、PytorchのCPUバージョンを選択できます。 2。PythonバージョンPytorch

NGINXのインストールをインストールするには、次の手順に従う必要があります。開発ツール、PCRE-Devel、OpenSSL-Develなどの依存関係のインストール。 nginxソースコードパッケージをダウンロードし、それを解凍してコンパイルしてインストールし、/usr/local/nginxとしてインストールパスを指定します。 nginxユーザーとユーザーグループを作成し、アクセス許可を設定します。構成ファイルnginx.confを変更し、リスニングポートとドメイン名/IPアドレスを構成します。 nginxサービスを開始します。依存関係の問題、ポート競合、構成ファイルエラーなど、一般的なエラーに注意する必要があります。パフォーマンスの最適化は、キャッシュをオンにしたり、ワーカープロセスの数を調整するなど、特定の状況に応じて調整する必要があります。

CentOSシステムのPytorchデータを効率的に処理するには、次の手順が必要です。依存関係のインストール:システムを最初に更新し、Python3とPIPをインストールします。仮想環境構成(推奨):Condaを使用して、新しい仮想環境を作成およびアクティブにします。例:Condacreate-N
