Python PIL图像对象是可变的吗?
我尝试运行一个如下所示的函数:Python PIL图像对象是可变的吗?,python,python-imaging-library,pillow,mutable,Python,Python Imaging Library,Pillow,Mutable,我尝试运行一个如下所示的函数: #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 ...
#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
中的实例是不可变的
我确信这个算法是有效的,因为当我使用
返回输出\u img
我得到了正确的结果。我只想把结果传给论点
提前感谢。这是对Python的误解,而不是对PIL的误解。在
apply_black_gradient
中,为output_img
指定一个值。这只会更改函数内该变量中存储的值。因此在apply_black_gradient
内部,output_img
的值已更改,但这并没有更改其他文件中img2
的值。在这种情况下,最好的方法是按照您所说的返回output\u img
如果将类似list/dict/object的内容作为参数传递,则可以在函数中修改部分内容(列表的元素、dict的成员),并在调用代码中查看这些修改。但是在上面发布的代码中不需要这样做,只需使用return
就可以修改输入\u img
,因此从这个意义上讲,它们是“可变的”,就像列表
或dict
一样。这是一个例子。