如何将__name__用于带有关键字参数的函数?

时间:2014-04-11 10:41:45

标签: python function keyword-argument

如何将名称与我希望传递关键字参数的函数一起使用?

例如,我有以下功能:

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

如果你有一个带有函数的方法,然后传入函数,而不是返回值。

您正在调用该函数。 .__name__属性查找应用于该调用的返回值。如果要将函数调用的返回值传递给方法,则传递函数对象本身。

如果需要通过方法传入需要使用某些参数调用的函数,则可以传入这些额外的参数,并让方法为您使用这些参数: / p>

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