如何解决在循环中如何创建不同的变量名?
| 出于示例目的...for x in range(0,9):
string\'x\' = \"Hello\"
所以我最终得到string1,string2,string3 ...都等于\“ Hello \”
解决方法
你当然可以;它叫做字典:
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\'}
我说的有点难受,但实际上将一个值与另一个值相关联的最佳方法是字典。这就是它的设计目的!
, 这真是个坏主意,但是...
for x in range(0,9):
globals()[\'string%s\' % x] = \'Hello\'
然后例如:
print(string3)
会给你:
Hello
但是,这是不好的做法。如其他人建议的那样,您应该改用字典或列表。当然,除非您真的想知道如何做,但不想使用它。
, 创建变量变量名根本没有意义。为什么?
它们是不必要的:您可以将所有内容存储在列表,字典等中
它们很难创建:您必须使用exec
或globals()
您不能使用它们:如何编写使用这些变量的代码?您必须再次使用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
, exec()
是实现此目的的一种方法。例如:
for k in range(5):
exec(f\'cat_{k} = k*2\')
打印(cat_0)
0
打印(cat_1)
2
打印(cat_2)
4
打印(cat_3)
6
打印(cat_4)
8
在这里,我利用了Python 3.6+中方便的f字符串格式
, 不要使用字典
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()的返回值不是一个好主意
, for x in range(9):
exec(\"string\"+str(x)+\" = \'hello\'\")
这应该工作。
, 我会使用一个列表:
string = []
for i in range(0,9):
string.append(\"Hello\")
这样,您将有9个“ Hello”,您可以像这样单独获取它们:
string[x]
ѭ15将标识您想要的\“ Hello \”。
因此,print(string[1])
将打印Hello
。
, 我认为这里的挑战不是要调用global()
我将为要保存的(动态)变量定义一个列表,然后将其附加到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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。