-8

重複の可能性:
Python デコレータを理解する

デコレータを説明する短いコード例を教えてください。

4

2 に答える 2

5
def spam(func):
    def wrapped(*args, **kwargs):
        print "SPAM"
        return func(*args, **kwargs)
    return wrapped

@spam #this is the same as doing eggs = spam(eggs)
def eggs():
    print "Eggs?"

クラスを使用してデコレータを作成することもできることに注意してください

class Spam(object):
    def __init__(self, func):
        self.func = func

    def __repr__(self):
        return repr(self.func)

    def __call__(self, *args, **kwargs):
        print "SPAM"
        return self.func(*args, **kwargs)

@Spam
def something():
    pass
于 2012-07-05T10:40:47.620 に答える
1

デコレータは関数定義を受け取り、この関数を実行して結果を変換する新しい関数を作成します。

@deco
def do():
    ...

次と同等です。

do = deco(do)

例:

def deco(func):
    def inner(letter):
        return func(letter).upper()  #upper
    return inner  # return a function object

#This
@deco
def do(number):
    return chr(number)  # number to letter
#end

# is equivalent to this
def do2(number):
    return chr(number)

do2 = deco(do2)
#end


# 65 <=> 'a'
print(do(65))
print(do2(65))
>>> B
>>> B

デコレータを理解するには、デコレータがfuncを実行して結果を変換する内部の新しい関数doを作成したことに注意することが重要です。

于 2012-07-05T10:38:24.413 に答える