Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの関数デコレータ?


Python開発者は、デコレータを使用して呼び出し可能オブジェクト自体を永続的に変更することなく、呼び出し可能関数、メソッド、またはクラスの動作を拡張および変更できます。つまり、これらは関数やクラスを変更するために使用される呼び出し可能なオブジェクトであると言えます。

関数デコレータは、関数参照を引数として受け取り、それらの周りにラッパーを追加し、ラッパーを含む関数を新しい関数として返す関数です。

例を挙げて関数デコレータを理解しましょう:

コード1

 @decoratordef func(arg):「値」を返す

上記のコードは次と同じです:

Code2

 def func(arg):return "value" func =decorator(func)

したがって、上から、デコレータは、引数として関数を受け取り、それを返す単なる別の関数であることがわかります。

デコレータは基本的に別の関数を「デコレート」または「ラップ」し、以下の例で説明するように、ラップされた関数の実行の前後にコードを実行できるようにします。

 def our_decorator(func):def function_wrapper(x):print("呼び出す前に"+ func .__ name__)func(x)print("呼び出した後"+ func .__ name__)return function_wrapperdef foo(x):print( "こんにちは、fooは" + str(x))print( "装飾の前にfooを呼び出します:")foo( "Hi")print( "fooをfで装飾します:")foo =our_decorator(foo) print( "デコレーションの後にfooを呼び出します:")foo(90)

出力

装飾の前にfooを呼び出します:こんにちは、fooはHiで呼び出されました 

上記が少し複雑だと思われる場合は、可能な限り単純なデコレータを作成しましょう。

 def null_decorator(func):return func 

null_decoratorの上にはcallable(function)があり、入力として別のcallableを取り、変更せずに同じ入力callableを返します。

別の関数をデコレーション(またはラップ)して、上記の最も単純なデコレータを拡張しましょう。

 def null_decorator(func):return funcdef greet():return "Hello、Python!" greet =null_decorator(greet)>>> greet()'Hello、Python!' 

上記では、greet関数を定義し、null_decorator関数を実行してすぐに装飾しました。

(greetでnull_decoratorを明示的に呼び出してから、greet変数を再割り当てする代わりに)上記のpython装飾プログラムを作成するはるかに簡単な方法は、Python@syntaxを使用して1つのステップで関数を装飾することです。

 @null_decoratordef greet():return "Hello、Python!">>> greet()'Hello、Python!' 

  1. Pythonのissubset()関数

    この記事では、Python標準ライブラリで利用可能なissubset()関数の実装と使用法について学習します。 issubset()メソッドは、セットのすべての要素が別のセットに存在する場合(引数として渡される場合)はブール値のTrueを返し、それ以外の場合はブール値のFalseを返します。 下の図では、BはAのサブセットです。AとBが同一のセットである場合、AはBの適切なサブセットであることを意味します。これは、両方のセットに同じ要素が含まれていることを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値 boolean True/

  2. Intersection()関数Python

    この記事では、任意のセットで実行できるintersection()関数について学習します。数学によると、共通部分とは、2つのセットから共通の要素を見つけることを意味します。 構文 <set name>.intersection(<set a1> <set a2> ……..) 戻り値 引数として渡されるセット内の共通要素。 例 set_1 = {'t','u','t','o','r','i','a','l&