【问题标题】:Length of arguments of Python function? [duplicate]Python函数的参数长度? [复制]
【发布时间】:2023-03-04 02:52:01
【问题描述】:

可能重复:
How to find out the arity of a method in Python

例如我声明了一个函数:

def sum(a,b,c):
    return a + b + c

我想获取“sum”函数的参数长度。
像这样的东西: some_function(sum) 返回 3
如何在 Python 中完成?

更新:
我问这个问题是因为我想写一个函数,它接受另一个函数作为参数和参数来传递它。

def funct(anotherFunct, **args): 

我需要验证:

if(len(args) != anotherFuct.func_code.co_argcount):
    return "error"

【问题讨论】:

  • 你可以看到源代码,不是吗?明明是3。你还需要知道什么?
  • 你为什么不尝试传递*args并返回return len(args)return len(filter(None, args))!!!
  • 因为我想编写一个函数,它接受另一个函数作为参数和参数来传递它。 def funct(anotherFunct, **args): 我需要验证: if(len(args) != anotherFuct.func_code.co_argcount): return "error"
  • 更新您的问题以包含所有背景信息。

标签: python function parameters arguments


【解决方案1】:

inspect 模块是你的朋友;特别是inspect.getargspec,它为您提供有关函数参数的信息:

>>> def sum(a,b,c):
...     return a + b + c
...
>>> import inspect
>>> argspec = inspect.getargspec(sum)
>>> print len(argspec.args)
3

argspec 还包含可选参数和关键字参数的详细信息,在您的情况下您没有,但值得了解:

>>> print argspec
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)

【讨论】:

    【解决方案2】:

    如果您的方法名称是sum,那么sum.func_code.co_argcount 将为您提供参数数量。

    【讨论】:

    • 使用这种方法有什么缺点?鉴于其他答案,我认为使用 inspect 是首选方式。这是为什么呢?
    【解决方案3】:
    import inspect
    
    print len(inspect.getargspec(sum)[0])
    

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2012-12-03
      • 2019-03-01
      • 2012-01-06
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多