How to get a function name as a string?

后端 未结 12 2357
后悔当初
后悔当初 2020-11-22 04:35

In Python, how do I get a function name as a string, without calling the function?

def my_function():
    pass

print get_function_name_as_string(my_function         


        
12条回答
  •  面向向阳花
    2020-11-22 05:07

    As an extension of @Demyn's answer, I created some utility functions which print the current function's name and current function's arguments:

    import inspect
    import logging
    import traceback
    
    def get_function_name():
        return traceback.extract_stack(None, 2)[0][2]
    
    def get_function_parameters_and_values():
        frame = inspect.currentframe().f_back
        args, _, _, values = inspect.getargvalues(frame)
        return ([(i, values[i]) for i in args])
    
    def my_func(a, b, c=None):
        logging.info('Running ' + get_function_name() + '(' + str(get_function_parameters_and_values()) +')')
        pass
    
    logger = logging.getLogger()
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s [%(levelname)s] -> %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.INFO)
    
    my_func(1, 3) # 2016-03-25 17:16:06,927 [INFO] -> Running my_func([('a', 1), ('b', 3), ('c', None)])
    

提交回复
热议问题