簡體   English   中英

如何將 __name__ 與帶有關鍵字參數的函數一起使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM