如何打印函数头,包括名称,参数和文档字符串?

时间:2015-04-01 20:53:57

标签: function python-3.x

说我有以下内容:

def foo(arg1, arg2, arg3 = default, *args, *kwargs*):
    """This function is really cool."""
    return

如何定义新功能functionprinter(f)以便functionprinter(f)打印

foo(arg1, arg2, arg3 = default, *args, *kwargs*)
This function is really cool.

或那种性质的东西?我已经知道foo.__name__foo.__doc__已经看过inspect模块,特别是Getting method parameter names in python,但似乎无法将所有内容串在一起,特别是默认情况下参数打印正确。我使用的是Python 3.4.1。

2 个答案:

答案 0 :(得分:2)

烨!您可以使用inspect模块:

import inspect

def foo(arg1, arg2, arg3=None , *args, **kwargs):
    """This function is really cool."""
    return

def functionprinter(f):

    print("{}{}".format(f.__name__, inspect.signature(f)))
    print(inspect.getdoc(f))

functionprinter(foo)

打印:

  

foo(arg1,arg2,arg3 =无,* args,** kwargs)
  这个功能真的很酷。

请注意,我将default参数更改为None仅用于此演示,因为我没有定义变量default

答案 1 :(得分:1)

您可以使用inspect.signature(表示可调用对象的调用签名及其返回注释。)和inspect.getdoc

>>> print(inspect.signature(foo))
(arg1, arg2, arg3=3, *args, **kwargs)
>>> inspect.getdoc(foo)
'This function is really cool.'

>>> print ('\n'.join((foo.__name__+str(inspect.signature(foo)),inspect.getdoc(foo))))
foo(arg1, arg2, arg3='', *args, **kwargs)
This function is really cool.