Python 元编程组合学

Python 元编程组合学,python,variadic-functions,Python,Variadic Functions,我感兴趣的是创建一个python函数,它接受2*n个参数,其中n可以是变量。将前n个参数与后n个参数进行比较 本质上,例如,如果n=2,函数f(a1,a2,b1,b2)将检查(a1==b1和a2==b2)或(a1==b2和a2==b1)。对于n=3,函数f(a1,a2,a3,b1,b2,b3)将检查(a1==b1和a2==b2和a3==b3)或(a1==b2和a2==b3和a3==b1)或(a1==b3和a2==b1和a3==b2) 但是,我希望函数根据n的值动态构造条件语句 这可能是一个很高的

我感兴趣的是创建一个python函数,它接受2*n个参数,其中n可以是变量。将前n个参数与后n个参数进行比较

本质上,例如,如果n=2,函数f(a1,a2,b1,b2)将检查(a1==b1和a2==b2)或(a1==b2和a2==b1)。对于n=3,函数f(a1,a2,a3,b1,b2,b3)将检查(a1==b1和a2==b2和a3==b3)或(a1==b2和a2==b3和a3==b1)或(a1==b3和a2==b1和a3==b2)

但是,我希望函数根据n的值动态构造条件语句

这可能是一个很高的要求,我可以做我自己的研究,但有没有人可以为我指出正确的方向?这将被视为元编程,对吗?有人知道有这样的图书馆吗

谢谢


-AA

< P>编辑:既然您现在指定了Python,就认为这是未来ASKER的另一个起点。

您可以从一些可变模板开始研究:

template<typename... Args>
void foo(Args&&... args) {
  static_assert(sizeof...(args) % 2 == 0, "Need 2*n parameters for some n");
  // Condition using array + parameter pack expansion.
}
模板
void foo(Args&&…Args){
static_assert(sizeof…(args)%2==0,“对于某些n需要2*n个参数”);
//使用阵列+参数包扩展条件。
}

<代码>语言C++?哪个版本?C++11?C++14?C++17?Python。抱歉,忘记提及OK:标记为“python”
def f(*args):
    l = len(args)
    assert l % 2 == 0
    return args[:l / 2] == args[l / 2:] or args[:l / 2] == args[l:l / 2 - 1:-1]


assert f(True, True)
assert not f(True, False)
assert f(True, False, True, False)
assert f(True, False, False, True)
assert not f(True, False, True, True)
assert f(1, 1)
assert not f(1, 2)
assert f(1, 2, 1, 2)
assert f(1, 2, 2, 1)
assert not f(1, 2, 0, 1)
assert not f(1, 2, 1, 0)
assert f(1, 2, 3, 1, 2, 3)
assert f(1, 2, 3, 3, 2, 1)
assert not f(1, 2, 3, 1, 2, 0)
assert not f(1, 2, 3, 0, 2, 1)