是否有可能在不调用Python函数的情况下确定其最小值和相关参数名?



假设我有这样一个函数:

def destroy_all_the_users(a, b, c, d, e, f=2, *g, **h):
  i = 2

似乎我可以计算它的最小值(我必须给它的最小参数),像这样:

import types
# This doesn't work on some C functions like, say, file.write
def get_minimum_arity(func_alike):
  # This might not be a function but a method
  if type(func_alike) is types.MethodType:
    func_alike = func_alike.im_func
  # This might not be a function but a __call__'able
  if type(func_alike) is not types.FunctionType:
    func_alike = func_alike.__call__
  return func_alike.__code__.co_argcount - len(func_alike.__defaults__)
但是,我如何确定这5个参数的名称 ?对于destroy_all_the_users,就是('a', 'b', 'c', 'd', 'e')。看起来有希望的属性没有(例如,destroy_all_the_users.__code__.co_varnames也包括g, h, i),我不一定有函数的源代码。dis.dis(destroy_all_the_users)的输出似乎同样没有帮助。

例如,我想检查任意类的file性,该类甚至可能不是从file派生的。您真正关心的是这个任意类有足够多的相同方法(比如write),这意味着至少它们应该接受相同数量的参数(1,但更多可选参数不是问题)和相同的参数名称(…)坏例子:似乎file.write是特殊的,不允许通过关键字传递它的强制参数))。

以下几行代码

>>> import inspect
>>> inspect.getfullargspec(destroy_all_the_users)

给出如下输出:

FullArgSpec(args=['a', 'b', 'c', 'd', 'e', 'f'],
            varargs='g',
            varkw='h',
            defaults=(2,),
            kwonlyargs=[],
            kwonlydefaults=None,
            annotations={})

相关内容

  • 没有找到相关文章

最新更新