如何将名称与我希望传递关键字参数的函数一起使用?
例如,我有以下功能:
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
答案 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