func_signatures.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:xarray_filters 作者: ContinuumIO 项目源码 文件源码
def get_args_kwargs_defaults(func):
    '''Get the required args, defaults, and var keywords of func

    Parameters
    ----------

    func: callable

    Returns
    -------

    tuple of 3 elements:
        args: Positional argument names
        kwargs: Keyword arguments and their defaults
        takes_var_keywords: True if func takes variable keywords

    Examples
    --------

    TODO
    '''
    if hasattr(inspect, 'signature'):
        sig = inspect.signature(func) # Python 3
        empty = inspect._empty
    else:
        import funcsigs
        sig = funcsigs.signature(func) # Python 2
        empty = funcsigs._empty
    params = sig.parameters
    kwargs = {}
    args = []
    takes_variable_keywords = None
    for k, v in params.items():
        if v.default != empty:
            kwargs[k] = v.default
        else:
            args.append(k)
        if v.kind == 4:
            #<_ParameterKind.VAR_KEYWORD: 4>
            takes_variable_keywords = k

        '''sig = inspect.getargpsec(func) # Python 2
        args = sig.args
        kwargs = sig.keywords
        called = None
        for x in range(100):
            test_args = (func,) + tuple(range(x))
            try:
                called = inspect.getcallargs(*test_args)
                break
            except:
                pass
        if called is None:
            raise
        '''
    return args, kwargs, takes_variable_keywords
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号