在循环中如何创建不同的变量名?

举个例子。

for x in range(0,9):
string'x' = "Hello"

结果是 string 1,string 2,string 3... 都等于“ Hello”

553678 次浏览

这真的不是个好主意,但是..。

for x in range(0, 9):
globals()['string%s' % x] = 'Hello'

然后举个例子:

print(string3)

会给你:

Hello

然而,这是不好的做法。正如其他人建议的那样,你应该使用字典或列表来代替。当然,除非你真的想知道怎么做,但又不想用。

我会用一个列表:

string = []
for i in range(0, 9):
string.append("Hello")

这样,你就有了9个“ Hello”,你可以像下面这样单独得到它们:

string[x]

其中 x将标识您想要的“ Hello”。

所以 print(string[1])会打印 Hello

当然可以,这叫做 字典:

d = {}
for x in range(1, 10):
d["string{0}".format(x)] = "Hello"
>>> d["string5"]
'Hello'
>>> d
{'string1': 'Hello',
'string2': 'Hello',
'string3': 'Hello',
'string4': 'Hello',
'string5': 'Hello',
'string6': 'Hello',
'string7': 'Hello',
'string8': 'Hello',
'string9': 'Hello'}

我这样说有点含糊其辞,但将一个值与另一个值联系起来的最好方法是使用字典。这就是它的设计目的!

创建变量名是毫无意义的,为什么呢?

  • 它们是不必要的: 你可以把所有东西存储在列表、字典等等
  • 它们很难创建: 必须使用 execglobals()
  • 不能使用它们: 如何编写使用这些变量的代码? 必须再次使用 exec/globals()

使用列表要容易得多:

# 8 strings: `Hello String 0, .. ,Hello String 8`
strings = ["Hello String %d" % x for x in range(9)]
for string in strings: # you can loop over them
print string
print string[6] # or pick any of them

不要用字典做这件事

import sys
this = sys.modules[__name__] # this is now your current namespace
for x in range(0,9):
setattr(this, 'string%s' % x, 'Hello')


print string0
print string1
print string2
print string3
print string4
print string5
print string6
print string7
print string8

不要这样做,用一个字典

Globals ()具有风险,因为它向您提供名称空间当前指向的内容,但是这可能会发生变化,因此修改 globals ()的返回值并不是一个好主意

一种方法是使用 exec()。例如:

for k in range(5):
exec(f'cat_{k} = k*2')
>>> print(cat_0)
0
>>> print(cat_1)
2
>>> print(cat_2)
4
>>> print(cat_3)
6
>>> print(cat_4)
8

在这里,我利用了 Python 3.6 + 中方便的 f 字符串格式

我认为这里的挑战不是呼吁全球()

我将亲自为您的(动态)变量定义一个列表,然后在 for 循环中将其附加到列表中。 然后使用一个单独的 for 循环查看每个条目,甚至执行其他操作。

这里有一个例子-我在不同的分支上有许多网络交换机(比如在2到8之间)。现在我需要确保我有一种方法来确定在任何给定的分支上有多少个可用的交换机(或活动的 ping 测试) ,然后对它们执行一些操作。

这是我的代码:

import requests
import sys


def switch_name(branchNum):
# s is an empty list to start with
s = []
#this FOR loop is purely for creating and storing the dynamic variable names in s
for x in range(1,8,+1):
s.append("BR" + str(branchNum) + "SW0" + str(x))


#this FOR loop is used to read each of the switch in list s and perform operations on
for i in s:
print(i,"\n")
# other operations can be executed here too for each switch (i) - like SSH in using paramiko and changing switch interface VLAN etc.




def main():


# for example's sake - hard coding the site code
branchNum= "123"
switch_name(branchNum)




if __name__ == '__main__':
main()

产出为:

BR123SW01

BR123SW02

BR123SW03

BR123SW04

BR123SW05

BR123SW06

BR123SW07

for x in range(9):
exec("string" + str(x) + " = 'hello'")

这个应该可以。

使用字典应该是保存变量和相关值的正确方法,您可以使用以下方法:

dict_ = {}
for i in range(9):
dict_['string%s' % i]  = 'Hello'

但是如果你想把变量添加到局部变量中,你可以使用:

for i in range(9):
exec('string%s = Hello' % i)

例如,如果要给它们赋值0到8,可以使用:

for i in range(9):
exec('string%s = %s' % (i,i))

Dictionary 可以包含值,并且可以使用 update ()方法添加值。您希望系统创建变量,因此应该知道保存在哪里。

variables = {}
break_condition= True # Dont forget to add break condition to while loop if you dont want your system to go crazy.
name = “variable”
i = 0
name = name + str(i) #this will be your variable name.
while True:
value = 10 #value to assign
variables.update(
{name:value})
if break_condition == True:
break