如何动态地制作特定的arity功能?

aka*_*nuk 3 python variadic-functions

我想在运行时计算lambda n参数n.下一个最佳解决方案是:

 lambda *x : do_something_with_a_tuple( x )
Run Code Online (Sandbox Code Playgroud)

这几乎没问题,但是我想要确切的数字由Python本身检查并通过func_code查看.当它n是2时,它应该完全像:

 lambda x1, x2 : do_something_with_a_tuple( (x1, x2) )
Run Code Online (Sandbox Code Playgroud)

随着n等于3:

 lambda x1, x2, x3 : do_something_with_a_tuple( (x1, x2, x3) )
Run Code Online (Sandbox Code Playgroud)

所以我希望variadic函数表现得像n-adic.我可以在没有eval元编程的情况下这样做吗?

che*_*ner 6

我不认为您可以强制定义采用固定数量的参数,但您可以在函数本身中包含运行时检查.

def make_n_adic(n):
    def x(*x):
        if len(x) != n:
            raise TypeError( "Function takes exactly {0} arguments ({1} given)".format(n, len(x))
        do_something(*x)
    return x
Run Code Online (Sandbox Code Playgroud)

  • @MartijnPieters假设在编写代码时已知`n`. (2认同)