[英]How do you use __name__ with a function with a keyword argument?
您如何將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
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__
屬性查找應用於該調用的返回值。 如果將函數調用的返回值傳遞給方法,則不會傳遞函數對象本身。
如果您需要傳入一個需要由 method使用某些參數調用的函數,您可以傳入這些額外的參數,並讓該方法為您使用這些參數:
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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.