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'}
I said this somewhat tongue in check, but really the best way to associate one value with another value is a dictionary. That is what it was designed for!
回答 1
这真是个坏主意,但是…
for x in range(0,9):
globals()['string%s'% x]='Hello'
for x in range(0, 9):
globals()['string%s' % x] = 'Hello'
and then for example:
print(string3)
will give you:
Hello
However this is bad practice. You should use dictionaries or lists instead, as others propose. Unless, of course, you really wanted to know how to do it, but did not want to use it.
Here I am taking advantage of the handy f string formatting in Python 3.6+
回答 3
创建变量变量名根本没有意义。为什么?
它们是不必要的:您可以将所有内容存储在列表,字典等中
它们很难创建:您必须使用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 themprint string
print string[6]# or pick any of them
It’s simply pointless to create variable variable names. Why?
They are unnecessary: You can store everything in lists, dictionarys and so on
They are hard to create: You have to use exec or globals()
You can’t use them: How do you write code that uses these variables? You have to use exec/globals() again
Using a list is much easier:
# 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
回答 4
不要使用字典
import sys
this = sys.modules[__name__]# this is now your current namespacefor 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
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
don’t do this use a dict
globals() has risk as it gives you what the namespace is currently pointing to but this can change and so modifying the return from globals() is not a good idea
回答 5
for x in range(9):exec("string"+ str(x)+" = 'hello'")
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 sfor 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 onfor 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()
I think the challenge here is not to call upon global()
I would personally define a list for your (dynamic) variables to be held and then append to it within a for loop. Then use a separate for loop to view each entry or even execute other operations.
Here is an example – I have a number of network switches (say between 2 and 8) at various BRanches. Now I need to ensure I have a way to determining how many switches are available (or alive – ping test) at any given branch and then perform some operations on them.
Here is my code:
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()
Output is:
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07
回答 8
使用字典应该是保留变量和关联值的正确方法,您可以使用以下方法:
dict_ ={}for i in range(9):
dict_['string%s'% i]='Hello'
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.whileTrue:
value =10#value to assign
variables.update({name:value})if break_condition ==True:break
Dictionary can contain values and values can be added by using update() method. You want your system to create variables, so you should know where to keep.
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