我需要通过循环将图像分配给三个变量,即dsp1,dsp2,dsp3。执行时,出现语法错误。Python:使用循环语句将图像分配给变量
SyntaxError:无法分配给操作员。
for i in range(0,3):
dsp+str(i)=Image.open("L1.jpg")
What is the problem with 'str(i)' ?
任何一个可以用简单的例子解释一下吗?
我需要通过循环将图像分配给三个变量,即dsp1,dsp2,dsp3。执行时,出现语法错误。Python:使用循环语句将图像分配给变量
SyntaxError:无法分配给操作员。
for i in range(0,3):
dsp+str(i)=Image.open("L1.jpg")
What is the problem with 'str(i)' ?
任何一个可以用简单的例子解释一下吗?
代替生成动态的变量,将列表中的这些图片:
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']
)
在这两种情况下,您都不需要担心动态变量。相反,您将使用的所有内容都位于单个列表或字典中。
在添加'images ['dsp'+ str(i)]。show()'以显示图像时,打开OS(Windows)照片中的图像观众。我怎么能改变到默认的python窗口? – Sugantharaja
你不能只将字符串串起来创建一个不幸的变量名称。问题出在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
而不是离散变量名称。
不好意思,但这太可怕了...... uggh :-(工作并不是说得对。 –
问题是,您正试图在运行中生成变量名称。 如果我是你,我会尝试使用字典,而不是生成动态变量名称。如果你真的需要动态的变量名,我会去这样的事情:
exec("dsp%d = Image.open(\"L1.jpg\")" % (i));
,但我真的不推荐它。只需使用dictonary!
更糟糕的是,上面使用globals() - exec的答案应该很少用到 - 而且这不是其中之一 –
正如我所说:我真的不推荐它。我的建议是使用字典! – nablahero
我只是觉得在这个网站上给糟糕的代码是一个坏主意 - 很多人会读这个(不只是OP ),并且他们不会真正理解为什么在非常特殊的情况下exec是一个坏主意,我知道你说过你不推荐这个,但我不认为很多读过这个的人会注意到或理解你的建议,特别是当你不给代码使用字典时,他们只会复制你的代码片段,然后继续。 –
您不能分配给操作员。
看看你的代码行:
dsp + str(i) = Image.open("L1.jpg")
你有dsp + str(i)
左侧,包含和运营商+
的表达式。即使这会得到正确的评估,结果将是一个字符串,例如"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
为什么你需要动态变量名?你可以将它们分配给列表中的元素还是将其分配给字典中的键? – Andy
您不需要范围内的0。你可以做'range(3)'。 –
我不明白列表。你能证明吗? @Andy – Sugantharaja