Как вы используете __name__ с функцией с аргументом ключевых слов?
-
21-12-2019 - |
Вопрос
Как вы используете
Например, у меня есть следующая функция:
def func(keyword1='A'):
print keyword1
.
Я могу сделать это:
func.__name__
>> 'func'
.
Но я хотел бы сделать это:
func(keyword1='B').__name__
>>> 'func'
.
Причина, по которой я хотел бы сделать это, это потому, что у меня есть другой метод, который принимает эту функцию в качестве аргумента, и ему необходимо потянуть имя функции и запустить эту функцию с разными ключевыми словами.
Так, что я действительно пытаюсь сделать, это получить эту функцию для работы:
def Function_Name_And_Result(x):
print x.__name__ + x()
Function_Name_And_Result(func(keyword1='B'))
>> funcB
. Решение
Функции Python - это объекты, поэтому вы можете пройти их как и любой другой объект.Что вы делаете (что не может быть явно работать), передает результат вызова функции.То, что вы хотите, это пройти функцию и аргумент функции:
def print_function_name_and_result(func, *args, **kw):
print "%s : %s" % (func.__name__, func(*args, **kw))
print_function_name_and_result(func, keyword1='B')
>> func : B
. Другие советы
Если у вас есть метод, который принимает функцию, затем проходит в функции , а не возвращаемое значение.
Вы вместо этого вызывают функцию.Поиск атрибута .__name__
применяется к возвращаемому значению этого вызова.Если вы передаете значение возвращаемости вызова функции на ваш метод, вы находитесь не , передавая саму объект функции.
Если вам нужно пройти в функции, которая должна быть вызвана с определенными аргументами методом , вы можете пройти в этих дополнительных аргументах, а метод использовать эти аргументы для вас: .
.
def Function_Name_And_Result(x, *args, **kw):
print x.__name__, x(*args, **kw)
Теперь вы все еще можете пройти в своем объекте функции сам :
Function_Name_And_Result(func, keyword1='B')
.
Демо:
>>> def Function_Name_And_Result(x, *args, **kw):
... print x.__name__, x(*args, **kw)
...
>>> def func(keyword1='A'):
... print keyword1
...
>>> Function_Name_And_Result(func, keyword1='B')
func B
None
.