Как вы используете __name__ с функцией с аргументом ключевых слов?

StackOverflow https://stackoverflow.com//questions/23010340

Вопрос

Как вы используете имя с функцией, которую я хотел бы пройти аргумент ключевого слова?

Например, у меня есть следующая функция:

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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top