gpt4 book ai didi

python - 在访问装饰函数中的 for 循环变量时装饰函数

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:17 26 4
gpt4 key购买 nike

目前我有一堆函数可以循环图像,进行一些更改,然后绘制每个图像。

def second (images):
for image in images:
image = imread(image)
image = image - 100
plt.subplot(121)
plt.imshow(image)
plt.show()

现在我想装饰这些函数,以便每个图像都有另一个子图。包含正常图像的子图和包含转换图像的子图。

但是,我需要能够使用 second 函数从 images 迭代访问 image,并且对于每次迭代都使用此函数包装器内的图像

有没有一种干净的方法可以做到这一点?我找到了一种黑客方法来做到这一点:

def plt_decorate(func):
def func_wrapper(*args, **kwargs):
images = args[0]
for image in images:
im = imread(image)
mng = plt.get_current_fig_manager() #this two lines
mng.window.state('zoomed') # are just to zoom plot
plt.subplot(122),plt.imshow(im)
if args[1:]:
print( func([image], args[1:], **kwargs)) #can't return as loop ends
else:
print( func([image], **kwargs))
return func_wrapper



@plt_decorate
def second (images):
for image in images:
image = imread(image)
image = image - 100
plt.subplot(121)
plt.imshow(image)
plt.show()

最佳答案

装饰器的目的是在将输入传递给函数之前对其进行转换。因此,您应该继续的方法是循环遍历images,对其进行变异或引起一些副作用,然后将images传递给函数。

在你的情况下,它看起来像这样。

def plt_decorate(func):

def func_wrapper(images):

for image in images:
im = imread(image)
mng = plt.get_current_fig_manager()
mng.window.state('zoomed')
plt.subplot(122)
plt.imshow(im)

return func(images)

return func_wrapper



@plt_decorate
def second (images):
for image in images:
image = imread(image)
image = image - 100
plt.subplot(121)
plt.imshow(image)
plt.show()

关于python - 在访问装饰函数中的 for 循环变量时装饰函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49440531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com