Pythonでの関数まとめのデコレータクロージャーの詳しい解説
1. はじめに
関数はオブジェクトでもあるため、属性を表すピリオドを使用して属性を追加できます。
内部関数の定義に外部関数で定義されたオブジェクトへの参照が含まれている場合 (外部オブジェクトは外部関数の外側にある可能性があります)、内部関数はクロージャと呼ばれます。
2. デコレータ
デコレータは元の関数をラップして、元のコードを変更せずにさらに多くのことを実行できるようにします。
デコレータの構文は次のとおりです:
@deco2 @deco1 def func(arg1,arg2...): pass
これは 2 つのデコレータを持つ関数を表すため、意味は次のようになります: func = deco2(deco1(func))
パラメータのないデコレータの構文は次のとおりです:
@deco def func(): pass
は func = deco(func)
を意味しますパラメータ化されたデコレータの構文は次のとおりです:
@deco(deco_args) def func(): pass
の意味: func = deco(deco_args)(func)
複数のデコレータにはパラメータを持つものとパラメータを持たないものがあります。構文は次のとおりです。
@deco2(arg1,arg2) @deco1 def func(): pass
は foo = deco2(arg1,arg2)deco1(func)
を意味しますデコレーターは実際には関数であり、関数オブジェクトも受け入れます。
関数を実行する前に、準備コードを実行することも、コードの実行後にクリーンアップ作業を行うこともできます。
デコレーターを見ると、内部に関数を定義し、ターゲット関数への呼び出し、または定義内のどこかに少なくとも参照を埋め込むコードが見つかる可能性があります。
3. デコレータ関数
デコレータの機能は次のとおりです:
ログの導入、パフォーマンスを検出するためのタイミング ロジックの追加、関数へのトランザクション機能の追加
次の例は、パフォーマンスを検出するためのタイミング ロジックの導入を示しています。
#!/usr/bin/env python from time import ctime,sleep def tsfunc(func): #装饰器函数接受的是一个函数对象 def wrappedFunc(): print '[%s] %s() called' % (ctime(),func.__name__) return func() #在这里调用了函数对象,也就是表示装饰器是装饰了原来的函数,从而在原来函数的基础上进行了一些操作 return wrappedFunc @tsfunc #装饰器 def foo(): pass foo() sleep(4) for i in range(2): sleep(1) foo()
実行結果は次のとおりです。
[root@python 420]# python deco.py [Tue Apr 19 16:15:01 2016] foo() called [Tue Apr 19 16:15:06 2016] foo() called [Tue Apr 19 16:15:07 2016] foo() called
デコレーター関数では、タイムスタンプが追加され、ターゲット関数が呼び出されます。デコレーターの戻り値はラップされた関数です。。
4. 終了
内部関数内で、外部で動作する変数への参照が行われた場合 (ただし、グローバル スコープ内ではない)、内部関数はクロージャとみなされ、外部関数内で定義されていますが、内部関数によって参照または使用されます。この変数は自由変数と呼ばれます。
クロージャの主な機能は次のとおりです:
計算をインストールします。状態を非表示にします。関数オブジェクトとスコープを自由に切り替えます。
コールバックは関数であり、クロージャも関数ですが、少し追加のスコープを持つことができます。
#!/usr/bin/env python def counter(start_at=0): count = [start_at] def incr(): count[0] += 1 return count[0] return incr count= counter(5) print count() print count()
上記の例でわかるように、関数内の関数incrは外部変数countを参照し、毎回1ずつインクリメントするため、変数countを自由変数と呼びます。
上記の Python の関数概要におけるデコレータ クロージャの詳細な説明は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。

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

ホットトピック











LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

なぜ私のコードはAPIによってデータを返しているのですか?プログラミングでは、APIが呼び出すときにヌル値を返すという問題に遭遇することがよくあります。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
