Python : 使用循环语句将图像分配给变量
Python : Assigning image to a variable using loop statement
我需要通过循环将图像分配给三个变量,即dsp1、dsp2、dsp3。执行时,出现语法错误。
语法错误:无法分配给运算符。
for i in range(0,3):
dsp+str(i)=Image.open("L1.jpg")
What is the problem with 'str(i)' ?
谁能用简单的例子解释一下?
不幸的是,您不能只是将文本串在一起来创建这样的变量名。问题出在 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
这将允许您访问这些变量,就像您首先以 'normal' 方式创建它们一样。
理想情况下,您应该将结果分配给 list
,而不是离散的变量名称。
问题是您试图即时生成变量名。
如果我是你,我会尝试使用字典而不是生成动态变量名。如果你真的需要动态变量名,我会选择这样的东西:
exec("dsp%d = Image.open(\"L1.jpg\")" % (i));
但我真的不推荐。就用字典吧!
您不能分配给操作员。
看看你的代码行:
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
不生成动态变量,而是将这些图像放在列表中:
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']
)访问这些图像中的任何一个
在这两种情况下,您都无需担心动态变量。相反,您将使用的所有内容都位于单个列表或字典中。
我需要通过循环将图像分配给三个变量,即dsp1、dsp2、dsp3。执行时,出现语法错误。
语法错误:无法分配给运算符。
for i in range(0,3):
dsp+str(i)=Image.open("L1.jpg")
What is the problem with 'str(i)' ?
谁能用简单的例子解释一下?
不幸的是,您不能只是将文本串在一起来创建这样的变量名。问题出在 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
这将允许您访问这些变量,就像您首先以 'normal' 方式创建它们一样。
理想情况下,您应该将结果分配给 list
,而不是离散的变量名称。
问题是您试图即时生成变量名。 如果我是你,我会尝试使用字典而不是生成动态变量名。如果你真的需要动态变量名,我会选择这样的东西:
exec("dsp%d = Image.open(\"L1.jpg\")" % (i));
但我真的不推荐。就用字典吧!
您不能分配给操作员。
看看你的代码行:
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
不生成动态变量,而是将这些图像放在列表中:
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']
)访问这些图像中的任何一个
在这两种情况下,您都无需担心动态变量。相反,您将使用的所有内容都位于单个列表或字典中。