ホームページ > バックエンド開発 > Python チュートリアル > Python プログラミング: デコレーター関数の再理解

Python プログラミング: デコレーター関数の再理解

王林
リリース: 2023-05-27 15:57:22
転載
1134 人が閲覧しました

デコレータは Python の非常に便利なツールです。デコレータは、別の関数をパラメータとして受け取り、明示的に変更せずにその機能を拡張する関数です。これにより、ソース コードに触れることなく、関数またはクラスの動作を変更できます。

言い換えると、デコレーターは関数を永続的に変更するのではなく、その動作を拡張するために関数をラップします。

この記事から始めて、デコレータとは何か、そしてデコレータが Python でどのように機能するかを学びましょう。

Python プログラミング: デコレーター関数の再理解

1.1 関数について

デコレータがどのように機能するかを理解するには、Python の関数に関するいくつかの重要な概念を確認する必要があります。 Python では関数が第一級市民であることを常に意識してください。そのため、次の概念に留意してください:

  • ü 関数は通常の変数に割り当てることができます;
  • ü 関数は次のような変数に割り当てることができます。パラメータとして他の関数に渡されます;
  • ü 関数は関数を返すことができます;
  • ü 関数本体には他の関数 (内部関数) を含めることができます。

これらの点に関する関数の例を見てみましょう。

1.1.1 例-1: 通常の変数への値の代入

# 把函数赋值给常规变量:

# 定义简单函数
def sayHi(name:str):
return "Hi " + name + "."

#应用:函数赋值给变量
hi = sayHi
print(hi("Solo Cui"))
#输出结果
Hi Solo Cui.
ログイン後にコピー

コードでは、関数をsayHiとして定義します。次に、この関数を hi という名前のローカル変数に割り当てます。この変数 hi も関数です。この場合、割り当てられた変数は関数のエイリアスとみなすことができます。次のステップでは、変数 hi を関数として呼び出します: hi("Solo Cui")。

1.1.2 例-2: パラメーターとして渡される関数

コード リストは次のとおりです:

# 函数作为参数传递
def printHello(name):
print("Hello,", name)

# 把函数作为参数的函数
def hiWithFunction(func, xname):
func(xname)

#调用以函数为参数的函数
hiWithFunction(printHello,'上官婉儿')
ログイン後にコピー

コードは理解しやすいです。 2 つの関数が定義されており、関数は関数パラメータを受け取ることができ、別の関数は関数パラメータを受け取ることができる関数にパラメータとして渡されます。

1.1.3 例-3: 関数を返す関数

コード リストは次のとおりです:

#示例3:返回函数的函数
def returnXFunction():
return sayHi #示例1中定义的函数,可自行定义其它函数

# 调用函数
xHi = returnXFunction()
print(xHi("BirdMan"))
ログイン後にコピー

ここでは、別の関数、つまり returnXFunction() を返す単純な関数を定義します。関数を呼び出し、戻り値を変数に代入します。 xHi を使用すると、関数を返す関数を実行するために変数名 xHi が使用されます。

1.1.4 例-4: 関数組み込み関数本体

つまり、関数本体内に関数を定義します。コードを見てください:

# 示例4:函数体内不含税
def outerXFunction(msg):
'''外部函数'''
#代码...
#定义内嵌函数
def innerXFunc():
'''内部函数'''
print(msg,'来自内嵌函数.')

#函数体内调用内嵌函数
innerXFunc()

#调用外部函数
outerXFunction("火麒麟")
ログイン後にコピー

関数 externalXFunction 内で innerXFunc 関数を定義し、外部関数本体内で埋め込み関数を呼び出したので、外部関数が呼び出されたときに埋め込み関数が実行されます。

コードに示すように、外部関数を呼び出すときに、文字列「Fire Qilin」をパラメーター msg に渡します。 「埋め込み関数から発火するQilin」の出力は自己埋め込み関数によって完成します。 innerXFunc で使用される msg 変数は、独自の関数本体では定義されていないことに注意してください。言い換えると、親スコープの変数を使用します。これが Python のクロージャーの概念です。

Python クロージャについて簡単に説明すると、クロージャは親オブジェクトのスコープ内の値を記憶する関数オブジェクトであり、関数と一連の「プライベート」変数の間の関連付けを作成するために使用できます。 。 関係。これらのプライベート変数は、特定の関数への複数の呼び出しにわたって永続性を維持します。

以上がPython プログラミング: デコレーター関数の再理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート