ホームページ  >  記事  >  バックエンド開発  >  Python デコレータとは何ですか?使い方?

Python デコレータとは何ですか?使い方?

不言
不言転載
2018-12-30 10:57:363228ブラウズ

この記事では、Python デコレーターとは何なのかについて説明します。使い方?一定の参考値があるので、困っている友人は参考にしていただければ幸いです。

Pythonを学習していく中で、デコレータという漠然とした概念は誰しもが持っていると思いますが、私もずっと混乱していたので、それを整理するために記事を書くことにしました。

まず第一に、デコレータとは何かを理解する必要があります。

簡単に言えば、デコレータは、関数をラップする関数として理解でき、関数が必要なときに関数を追加します。関数が実行中です。この関数の元の内容には影響せず、関数の実行後にクリーンアップ作業を実行することもできます。

簡単な例を示します

@func1
def func2():
    pass

デコレータの動作はfunc1(func2) 関数オブジェクトをデコレータに渡し、デコレータを実行しますfunc1その中のコンテンツを取得し、関数 func2 を実行します。

たとえば、一般的なデコレータの例を見てみましょう

#普通装饰器
def func1(func):
    def add_func():
        print('这是我要添加的功能')
        return func()
    return add_func

@func1
def func2():
    print('hello world')

#func1装饰器函数
#func2被装饰的函数
>>>func2()
这是我要添加的功能
hello world

このコードでは、 func2() は func1(func2)()->add_func() と同等です。 func2() 関数を実行するには、デコレータ func1() 関数が最初に実行され、パラメータ func は func2() と同等です。 func1 関数を実行すると、戻り値が add_func なので、func1(func2)() を実行します。これは、add_func() を実行するのと同じで、
「これは私が追加した関数です」を出力し、func() を返します。 function. つまり、パラメータ func の呼び出し、つまり、対応する func2 関数の呼び出しです。

デコレータの基本フレームワーク

def func1(func):
    def func2():

        return func()
    return func1()

上級

パラメータを使用してデコレータを作成しましょう

def func1(func):
    def func2(a,b):
        a=1
        b=2
        return func(a,b)
    return func()
@func1
def func(x,y)
    print('this is a add func')
    print(x+y)

>>>func(10,20)
this is a add func
3

このコードの装飾された関数のパラメーターは、装飾された関数の変数に渡されます。つまり、xa に渡され、y は # # に渡されます。 #b, return func(a,b) は、func 関数が呼び出され、関数のパラメーターが ab## であることを意味します。 #。 パラメータを備えたより高度なデコレータ関数 (笑、少し混乱していますか?)

def arg_func(arg):
    def _func(func):
        def _func1():
            if arg=='good':
                print('出去玩')
            if arg=='bad':
                print('不出去玩')
            return func()
        return _func1
    return _func

@arg_func('bad')
def func():
    print('bad day')
@arg_func('good')
def func1()
    print('good day')

>>>func()
不出去玩
bad day
>>>func1()
出去玩
good day

このコードは実際には非常に単純です。つまり、デコレータには判定用のパラメータがもう 1 つあります。分かりやすそうです。同様に、func デコレータを実行すると、関数 (arg_func) のパラメータが不正になり、func1 関数を実行すると、デコレータ関数のパラメータが良好になります。

以上がPython デコレータとは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。