我试图首先对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
答案 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
函数始终在外部进行完全相同的定义,所以将其定义为仅一次。
我不能完全确定我做了您想要的事情,所以如果有什么遗漏,请不要犹豫