如何在带有关键字参数的函数中使用 __name__?
我想知道如何在一个函数中使用name,并通过它传递一个关键字参数。
比如,我有一个这样的函数:
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 个回答
3
如果你有一个方法需要接收一个函数,那就直接传入这个函数,而不是它的返回值。
你实际上是在调用这个函数。.__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
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