Вы можете написать функцию, которая возвращает функции:
def cyclic_perm(a):
n = len(a)
b = [[a[i - j] for i in range(n)] for j in range(n)]
return b
def cyclic_perm_func(a):
n = len(a)
def wrapper(a, n, j):
def cyc():
return [a[i - j] for i in range(n)]
return cyc
b = [wrapper(a, n, j) for j in range(n)]
return b
a = [1, 2, 3, 4,5,6]
print(cyclic_perm(a)) # Your original function
f = cyclic_perm_func(a) # f is now a list of functions
print([g() for g in f]) # Let's call each in turn
Вывод:
[[1, 2, 3, 4, 5, 6], [6, 1, 2, 3, 4, 5], [5, 6, 1, 2, 3, 4], [4, 5, 6, 1, 2, 3], [3, 4, 5, 6, 1, 2], [2, 3, 4, 5, 6, 1]]
[[1, 2, 3, 4, 5, 6], [6, 1, 2, 3, 4, 5], [5, 6, 1, 2, 3, 4], [4, 5, 6, 1, 2, 3], [3, 4, 5, 6, 1, 2], [2, 3, 4, 5, 6, 1]]
Обратите внимание на wrapper()
, который является способом захвата всех параметров, которые упакованная функцияcyc()
нуждается в каждом экземпляре.