繁体   English   中英

Python:使用循环语句将图像分配给变量

[英]Python : Assigning image to a variable using loop statement

我需要通过循环将图像分配给三个变量,即dsp1,dsp2,dsp3。 执行时,出现语法错误。

SyntaxError:无法分配给运算符。

for i in range(0,3):    
    dsp+str(i)=Image.open("L1.jpg")

'str(i)'是什么问题?

有人可以用简单的例子解释吗?

您不能分配给操作员。

查看您的代码行:

 dsp + str(i)  =  Image.open("L1.jpg")

左侧有dsp + str(i) ,一个包含sum运算符+的表达式。 即使可以正确评估,结果仍将是例如"dsp1"的字符串。 您不能将任何值分配给字符串。

而且因为这样的用法没有意义,所以Python不支持分配左侧的运算符。

您要动态创建变量名,而不是对其进行硬编码。 尽管可以使用exec()做到这一点,但强烈建议不要这样做,因为它很容易导致代码中的错误,难以阅读,甚至难以调试。 如果以这种方式评估的任何内容都是不受信任的数据(例如用户输入),则甚至可能存在安全风险(代码注入)。

您应该使用的是一个简单的list

dsp = []
for i in range(0,3):    
    dsp[i] = Image.open("L1.jpg")  # for whatever reason you open the same file 3 times...

您只需使用方括号即可创建列表。 如果要使用一些值初始化它,只需将它们写在里面,并用逗号隔开:

my_list = ["zero", 1, 2, "three", 4.5, True]

通过指定索引值来访问列表的元素,第一个元素从0开始:

print(my_list[3])  # output: three

您还可以轻松地遍历列表的所有元素:

for item in my_list:
    print(item)
# output:
# zero
# 1
# 2
# three
# 4.5
# True

代替生成动态变量,将这些图像放在列表中:

images = []
for i in range(3):
    images[i] = Image.open("L1.jpg")

使用此方法, L1.jpg被分配给以下内容:

images[0]
images[1]
images[2]

另外,您可以使用字典来更接近所使用的变量名格式:

images = {}
for i in range(3):
    images['dsp' + str(i)] = Image.open("L1.jpg")

这将产生具有以下布局的字典:

{
'dsp2': <image object>, 
'dsp1': <image object>, 
'dsp0': <image object>
}

您可以使用键访问任何这些图像(即image['dsp1']

在这两种情况下,您都不必担心动态变量。 相反,您将要使用的所有内容都位于单个列表或词典中。

不幸的是,您不能只是将文本字符串串在一起来创建这样的变量名。 问题出在dsp+str(i)= ,而不仅仅是str(i)

如果您绝对必须以这种方式执行此操作,则可以使用globals来执行此操作,如下所示:

for i in range(0,3):    
    globals()["dsp" + str(i)] = Image.open("L1.jpg")

print(dsp1) # This will contain something

这将允许您访问这些变量,就像您首先以“常规”方式创建它们一样。

不过,理想情况下,您应该将结果分配给list ,而不是离散变量名。

问题是您试图动态生成变量名。 如果您是我,我将尝试使用字典而不是生成动态变量名称。 如果您真的需要动态变量名,那么我会这样做:

exec(“ dsp%d = Image.open(\\” L1.jpg \\“)”%(i));

但我真的不推荐。 只需使用字典即可​​!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM