关于python:如何在循环中创建不同的变量名?

How do you create different variable names while in a loop?

例如……

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

所以我最后得到了第1,第2,第3条…都等于"你好"


当然可以,这叫做字典:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
d={}
for x in range(1,10):
        d["string{0}".format(x)]="Hello"

In [7]: d["string5"]
Out[7]: 'Hello'

In [8]: d
Out[8]:
{'string1': 'Hello',
 'string2': 'Hello',
 'string3': 'Hello',
 'string4': 'Hello',
 'string5': 'Hello',
 'string6': 'Hello',
 'string7': 'Hello',
 'string8': 'Hello',
 'string9': 'Hello'}

我说这有点夸张,但将一个值与另一个值关联起来的最好方法是字典。这就是它的设计目的!


这真是个坏主意,但是…

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

例如:

1
print(string3)

会给你:

1
Hello

然而,这是一种不好的做法。你应该像其他人建议的那样使用字典或列表。当然,除非你真的想知道怎么做,但不想使用它。


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

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

使用列表要容易得多:

1
2
3
4
5
# 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


别这样,用字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()。例如:

1
2
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

这里我利用了Python3.6中方便的F字符串格式。+


我会使用一个列表:

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

这样,你就有9个"你好",你可以这样单独得到它们:

1
string[x]

其中,x将标识您要哪个"您好"。

因此,print(string[1])将打印Hello


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

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

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

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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,"
"
)
        # 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