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 |
然而,这是一种不好的做法。你应该像其他人建议的那样使用字典或列表。当然,除非你真的想知道怎么做,但不想使用它。
创建变量名是毫无意义的。为什么?
- 它们是不必要的:您可以将所有内容存储在列表、字典等中
- 它们很难创建:您必须使用
exec 或globals() - 不能使用它们:如何编写使用这些变量的代码?你必须再次使用
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()的返回不是一个好主意。
一种方法是使用
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] |
其中,
因此,
我认为这里的挑战是不要呼吁全球()。
我将亲自为要保存的(动态)变量定义一个列表,然后在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