我感兴趣的是创建一个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==b1)。
但是,我希望函数根据n的值动态构造条件语句。
这可能是一个很高的要求,我可以做我自己的研究,但有没有人可以指出我的正确方向?这将被视为元编程,对吗?有人知道有一个图书馆存在于这类事情中吗?
谢谢,
-AA
发布于 2018-12-04 20:13:38
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)发布于 2018-12-04 18:50:26
编辑:既然您现在指定了Python,那么考虑将这作为未来请求者的额外起点。
您可以从一些不同的模板开始您的研究:
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.
}https://stackoverflow.com/questions/53619518
复制相似问题