我试图运行一个看起来像这样的函数:
#file A_FILE
from PIL import Image
def apply_black_gradient(input_img, output_img, gradient):
# parameters:
# input_img : Image object
# output_img: Image object
# gradient: gradient rate applied to input_img
...Some codes here...
output_img = Image.alpha_composite(input_im, gradient_im)
return
我的问题是我在另一个文件中使用该功能
from A_FILE import apply_black_gradient
apply_black_gradient(img1,img2,gradient)
img2.show()
应用渐变后,结果不应该被更改。
我想知道为什么Image
PIL
类中的实例不可变?
我确信算法有效,因为我使用的时候 return output_img 我得到了正确的结果。我只想将结果传递给参数。
提前致谢。
答案 0 :(得分:1)
这是对Python的误解,而不是PIL。在apply_black_gradient
中,您为output_img
分配了一个值。这只会更改函数内该变量中存储的值。因此,在apply_black_gradient
内,output_img
的值已更改,但未更改了其他文件中img2
的值。在这种情况下,最好的办法是return output_img
,如你所说。
如果您传递类似list / dict / object的内容作为参数,则可以在函数内修改它的部件(列表元素,dict成员),并查看这些修改在调用代码中。但是,您在上面发布的代码中没有必要这样做,只需使用return
。