如何在python中

时间:2015-12-08 15:21:43

标签: python for-loop lambda arguments

我试图通过仅在一个循环中转换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

2 个答案:

答案 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)