Python クロージャとは何ですか? Python クロージャの簡単な紹介 (例付き)
この記事では、Python クロージャとは何ですか? Python クロージャの簡単な紹介 (例付き) は、一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
クロージャとは何ですか?
実際、この関数を使用すると、誤ってクロージャをトリガーしてしまいます。何らかの理由で、上位層関数の変数が常に関数内で参照または変更されるためです。 will クロージャのトリガー
それでは、クロージャとは何でしょうか?実際、これは関数が入れ子になっているときにトリガーされるルールで、現在の関数が前の関数のローカル名前空間内の変数を参照し、関数自体がオブジェクトとして返されるときにトリガーされます。
クロージャをトリガーする関数をクロージャ関数と呼びます
クロージャの最大の特徴は、外部関数から返された後に変数に代入できることです。
def func1(): a = 2 #变量a为函数func1()开辟的局部命名空间内定义的变量 def func2(x): return x**a #函数fun2()内引用了变量a print('func2的id:',id(func2)) return func2 #内层函数名被当作返回值,此时闭包规则达成。 res = func1() # 此时res等同于func2,我们可以看看他们的id完全相同 print('res的id: ',id(res)) print(res(3)) del func1 print('删除函数func1之后:',res(5)) print(res.__closure__) print(type(res.__closure__[0])) print(res.__closure__[0].cell_contents) #此时,如果函数func2()没有引用外部函数变量a,我们可以试着把return x**a这句改成return x,这时函数func2就没有触发闭包规则 #此时如果再次打印res.__closure__,你会发现输出值为None
以下の出力結果からわかるように、関数 func1 を削除しても、外側の関数で定義されている変数 a は消えてしまいます。理論はまだ使用できます (理論的には a に対応するローカル空間が消滅するので、 a は消滅するはずです) 変数 a がまだ参照できる理由は閉包規則によるものです 外部関数のローカル変数は内部関数によって参照できます外部関数が返された場合でも、関数は返されます。
実際には、関数自体もオブジェクトであり、オブジェクトには多くの属性があり、その中のclosure
属性はクロージャに関連します。 closure
この属性は、セル オブジェクトを含むタプルを定義します。タプル内の各セル オブジェクトは、スコープ内の変数の値を保存するために使用されます。 func2的id: 139940709362136
res的id: 139940709362136
9
删除函数func1之后: 25
#我们来打印一下res的__closure__属性,可以看出它是由cell对象组成的元组
(<cell at 0x7f467c4a8558: int object at 0x5654c2553a40>,)
<class 'cell'> #打印类型结果就是元组
2 #打印cell中的值可以看出,这个cell对象中存储的变量值为2
以上がPython クロージャとは何ですか? Python クロージャの簡単な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック









PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

DebianシステムのReadDir関数は、ディレクトリコンテンツの読み取りに使用されるシステムコールであり、Cプログラミングでよく使用されます。この記事では、ReadDirを他のツールと統合して機能を強化する方法について説明します。方法1:C言語プログラムを最初にパイプラインと組み合わせて、cプログラムを作成してreaddir関数を呼び出して結果をinclude#include#include inctargc、char*argv []){dir*dir; structdireant*entry; if(argc!= 2){(argc!= 2){

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

この記事では、DebianシステムでNGINXSSL証明書を更新する方法について説明します。ステップ1:最初にCERTBOTをインストールして、システムがCERTBOTおよびPython3-Certbot-Nginxパッケージがインストールされていることを確認してください。インストールされていない場合は、次のコマンドを実行してください。sudoapt-getupdatesudoapt-getinstolcallcertbotthon3-certbot-nginxステップ2:certbotコマンドを取得して構成してlet'sencrypt証明書を取得し、let'sencryptコマンドを取得し、nginx:sudocertbot - nginxを構成します。

DebianでGitLabプラグインを開発するには、特定の手順と知識が必要です。このプロセスを始めるのに役立つ基本的なガイドを以下に示します。最初にgitlabをインストールすると、debianシステムにgitlabをインストールする必要があります。 GitLabの公式インストールマニュアルを参照できます。 API統合を実行する前に、APIアクセストークンを取得すると、GitLabのAPIアクセストークンを最初に取得する必要があります。 gitlabダッシュボードを開き、ユーザー設定で「アクセストーケン」オプションを見つけ、新しいアクセストークンを生成します。生成されます

DebianシステムでHTTPSサーバーの構成には、必要なソフトウェアのインストール、SSL証明書の生成、SSL証明書を使用するWebサーバー(ApacheやNginxなど)の構成など、いくつかのステップが含まれます。 Apachewebサーバーを使用していると仮定して、基本的なガイドです。 1.最初に必要なソフトウェアをインストールし、システムが最新であることを確認し、ApacheとOpenSSL:sudoaptupdatesudoaptupgraysudoaptinstaをインストールしてください

アパッチはインターネットの背後にあるヒーローです。それはWebサーバーであるだけでなく、膨大なトラフィックをサポートし、動的なコンテンツを提供する強力なプラットフォームでもあります。モジュラー設計を通じて非常に高い柔軟性を提供し、必要に応じてさまざまな機能を拡張できるようにします。ただし、モジュール性は、慎重な管理を必要とする構成とパフォーマンスの課題も提示します。 Apacheは、高度にカスタマイズ可能で複雑なニーズを満たす必要があるサーバーシナリオに適しています。
