Как я могу использовать «@» самостоятельно, например, «@staticmethod» - PullRequest
0 голосов
/ 25 декабря 2009

следующий мой код, он может напечатать 'xxx', но, наконец, работает неправильно:

def a(object):
    print 'xxx'

@a
def b():
    return 'bbb'
b()

В своих ответах, пожалуйста, старайтесь использовать примеры кода, а не текст, потому что мой английский не очень хорош. Спасибо.

Ответы [ 2 ]

5 голосов
/ 25 декабря 2009

Форма декоратора @a означает:

@a
def b...

равно точно так же, как:

def b...

b = a(b)

Итак, напишите a как функцию высшего порядка , AKA HOF : в частности, функцию, которая принимает объект функции в качестве аргумента и возвращает объект функции.

Когда вы даете NO идею в своем вопросе о что a должно DO , вы действительно лишаете возможности давать код пример, который имеет какой-либо смысл: хороший английский или нет, вы действительно загрязняете SO, не внося в него свой вклад своими вопросами, так как вы никогда не объясняете ЧТО вы пытаетесь достичь в своем коде !!!

1 голос
/ 25 декабря 2009
def a(b):
    print 'xxx'
    return b

@a
def b():
    return 'bbb'
b()

Это то же самое, что и

def a(b):
    print 'xxx'
    return b


def b():
    return 'bbb'

b = a(b)
b()
...