将参数传递给已对其进行操作的嵌套函数

时间:2019-08-13 15:07:35

标签: python function recursion nested arguments

我试图首先对x1,y1,x2,y2值进行迭代,将x16和x2加16,然后取那些在while循环下已经转换的值,然后使用new_row对它们进行再次操作但是move_row使用x1,y1,x2,y2参数值,而不是已对其进行操作的参数值。

我的代码:

count = 0
count2 = 0
def move1(x1, y1,x2, y2):
    def new_row(x1, y1, x2, y2):
        x1 = 0
        y1 = y1 + 16
        x2 = 16
        y2 += 16
        print(x1, y1, x2, y2)
        return (x1, y1, x2, y2)
    #image_creator(x1,y1,x2,y2)
    print(x1,y1,x2,y2)
    global count
    global count2
    while count <= 6:
        count += 1
        x1 += 16
        x2 += 16
        y1 = y1
        y2 = y2
        # image_creator(x1,y1,x2,y2)
        # print(x1,y1,x2,y2)
    new_row(x1=x1, y1=y1, x2=x2, y2=y2) # i want new_row to redefine x1,y1,x2,y2
    print(x1, y1, x2, y2)
    return (x1, y1, x2, y2)

def image_creator(x1,y1,x2,y2):
    global filename
    imgsmall = img.crop(x1,y1,x2,y2)
    new_filename = filename + 'small.jpg'
    return(imgsmall.save(new_filename))

move1(0,0,16,16)
# new_row is taking 0,0,16,16 as argument and not the new x1,y1,x2,y2 after the while loop

1 个答案:

答案 0 :(得分:0)

因此,问题在于您实际上从未更新过x1,y1,x2,y2的值。

这是因为在调用apply函数时(在编辑x2 == 12条件之后)实际上并没有存储它返回的值。

您必须将结果存储在某个地方,例如在下面的示例中,我将结果直接分配给x1,y1,x2,y2变量,如果您想保留该变量,则现在会丢失该变量的原始值您必须定义其他变量来存储new_row结果。

new_row

我也将count = 0 def new_row(x1, y1, x2, y2): return (0, y1+16, 16, y2+16) def move1(x1, y1, x2, y2): global count while count <= 6: count += 1 x1 += 16 x2 += 16 # After the loop is done x1, y1, x2, y2 = new_row(x1, y1, x2, y2) return (x1, y1, x2, y2) 函数带到了new_row之外,尽管它也应该在内部使用它也有代价:您每次都将重新创建整个move1函数将使用new_row函数。因为此move1函数始终在外部进行完全相同的定义,所以将其定义为仅一次。

我不能完全确定我做了您想要的事情,所以如果有什么遗漏,请不要犹豫