在函数its中打印函数名

2024-06-02 09:10:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多功能,比如:

def DBworker_thatdoes_job7():
    print "DBworker_thatdoes_job7 starting..."

    ... the actual code here ...

    print "DBworker_thatdoes_job7 finished."

如何在不硬编码函数名的情况下做到这一点?以下是我想要达到的目标:

^{pr2}$

注意:我已经看过了How to get a function name as a string in Python?,但是我在这里并没有找到一个好的方法。另外,这个问题与Determine function name from within that function (without using traceback)很接近,但这里应用于函数名在启动和结束时记录的特定用例,因此不完全是重复的。在


Tags: the函数name功能heredefcodefunction
3条回答

你可以用一个装饰师:

def start_finish(f):
    def new_f(*args, **kwargs):
        print("starting", f.__name__)
        f(*args, **kwargs)
        print("finished", f.__name__)
    return new_f

@start_finish
def function():
    print('function body')

function()

打印:

^{pr2}$

也许是个装修工?在

def log_function_start(fn):
    def wrapper(*args, **kwargs):
        print '{} starting...'.format(fn.__name__)
        fn(*args, **kwargs)
    return wrapper

@log_function_start
def DBworker_thatdoes_job7():
    ...

如果您手动实现一个可调用的函数,也就是说,通过使用__call__方法创建一个类,您就有更多的余地定制函数。在

>>> class foo(object): # or class foo: in Python 3
...     def __call__(self):
...         # your logic goes here
...         print(type(self).__name__)
... 
>>> foo = foo()
>>> foo()
foo

相关问题 更多 >