У меня есть 2 вопроса. Я создал декоратор, который проверяет, имеет ли словарь ключ или нет? Вот.Python - могу ли я использовать декоратор внутри функции?
def check_has_key(func):
def inner(x,y): # inner function needs parameters
dictionary = {"add" : "true", "subtract" : "true"}
if dictionary.has_key("add") :
return func(x,y)
return "Add not allowed"
return inner # return the inner function (don't call it)
@check_has_key
def add(x,y):
return x+y
print add(1,2)
1) Могу ли я передать ключ в качестве аргумента в обертке, а затем проверить, существует ли он или нет? Например: например, я просто передаю ключ как @check_has_ket("subtact")
.
2) Могу ли я использовать декоратор внутри функции? как в случае, если мне нужно проверить, есть ли у словаря ключ или нет, вглубь функции?
EDIT
Я получил ответ на 1-й вопрос.
def abc(a):
def check_has_key(func):
def inner(x,y): # inner function needs parameters
dictionary = {"add" : "true", "subtract" : "true"}
if dictionary.has_key(a) :
return func(x,y)
return "Add not allowed"
return inner # return the inner function (don't call it)
return check_has_key
@abc("subtract")
def add(x,y):
return x+y
print add(1,2)
Но мои сомнения по-прежнему остаются я могу использовать декоратор в глубине функции? Значение, если мне нужно проверить, существует ли ключ в словаре или не углубляться в эту функцию, могу ли я использовать декоратор для этой цели или мне нужно будет использовать только условие if?
Почему вы определяете словарь _inside_ внутреннюю функцию? Не будет ли тогда «dictionary.has_key» всегда истинным? И какова ваша цель в создании функции декоратора в любом случае? Кстати, вы можете использовать декораторы везде, где вы определяете функцию. – aIKid
(1) Используются ли декораторы только при определении функции или я могу использовать это точно так же, что означает между строками или кодами? (2), в каком порядке выполняются декораторы, если у меня есть несколько декораторов на 1 функции? –
Возможно, этот [ответ] (http://stackoverflow.com/a/1594484/1672128) на декораторах может помочь. Прочтите это, это все, что вам нужно знать о декораторах. –