我试图通过仅在一个循环中转换2个非常相似的循环来改进某些代码。基本上,这些循环之间的唯一区别是赋予函数参数的顺序。 我的代码是这样的:
for i in range(x):
for j in range(y):
sample_func(i,j)
然后我做了同样的事情,但改变了函数参数的顺序:
for i in range(x):
for j in range(y):
sample_func(j,i)
是否有一种简单的方法可以将此循环转换为一个函数,该函数接收一个参数,该参数告诉sample_func中输入的参数的顺序? 我希望我很清楚,并提前感谢你!
编辑:
for i in range(dimensions[1]):
count_b = 0
count_w = 0
len_esp = len(esp(board)[0][i])
add_esp = 0
for esp in len_esp[i]:
add_esp += esp
for k in range(1, dimensions[1] + 1):
if board_value(board, create_coordinate(i+1, k)) == 2:
count_b += 1
elif board_value(board, create_coordinate(i+1, k)) == 1:
count_w += 1
else:
return False
if add_esp != count_b or count_2 < (len_esp - 1):
return False
for i in range(dimensions[1]):
count_b = 0
count_w = 0
len_esp = len(esp(board)[1][i])
add_esp = 0
for esp in len_esp[i]:
add_esp += esp
for k in range(1, dimensions[1] + 1):
if board_value(board, create_coordinate(k, i+1)) == 2:
count_b += 1
elif board_value(board, create_coordinate(k, i+1)) == 1:
count_w += 1
else:
return False
if add_esp != count_b or count_2 < (len_esp - 1):
return False
return True
答案 0 :(得分:1)
打包,如果需要,可以反向展开。
for k in (1, -1):
sample_func(*(i, j)[::k])
答案 1 :(得分:0)
也许你可以在你的代码中使用python decorator方法。例如:
def loop(seq):
def _loop(function):
def __loop(*args,**kw):
x,y=args[0],args[1]
if seq==True:
function(x,y)
else:
function(y,x)
return __loop
return _loop
@loop(True)
def loop1(x,y):
for i in range(x):
for j in range(y):
printFunc(i,j)
loop1(3,5)
@loop(False)
def loop1(x,y):
for i in range(x):
for j in range(y):
printFunc(i,j)
loop1(3,5)