出于示例目的...
for x in range(0,9):
string'x' = "Hello"
所以我最终得到了string1,string2,string3 ...都等于“ Hello”
#1 楼
你当然可以;它被称为字典: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'}
我说的话有些牵强,但实际上是将一个值与另一个值关联的最佳方法值是字典。这就是它的设计目的!
评论
不应将其标记为正确答案,因为它不是。这是字典,不是动态变量分配,这是OP所要求的。
–鬼
9月28日17:09
#2 楼
这确实是个坏主意,但是... for x in range(0, 9):
globals()['string%s' % x] = 'Hello'
然后例如:
print(string3)
会给你:
Hello
,但这是不好的做法。正如其他人建议的那样,您应该改用字典或列表。当然,除非您真的想知道如何做,但不想使用它。
评论
您能否详细说明为什么这是一个坏主意?
–ajdigregorio
2014年7月8日在20:17
@paintedcones:首先,应该有一种方法可以做到这一点,并且使用简单的字典更为自然。而是使用globals字典是一个坏主意,因为它还会“隐式”创建或修改全局变量。由于以这种方式设置和修改变量都需要字典符号,因此没有理由使用globals()代替一些简单的字典。
–塔德克
2014年7月10日14:25
在某些情况下,确实需要创建一堆变量x1,x2,x3等。但是在大多数情况下,使用字典确实是最合适的方法。
– DevilApple227
16年7月2日在21:54
您好Tadeck,如何使用您的方法在Json Array循环上创建全局变量。 (用于enumerate(items)中的项目:)。我没有确切的语法。拜托,你能帮我吗?
–和谐酷
9月1日13:03
应该将其标记为正确答案,而不是其他答案。问题是如何动态创建变量,而不是“实现相似目标的最推荐方法”。
–鬼
9月28日17:11
#3 楼
一种执行此操作的方法是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字符串格式
评论
记住执行某些东西,黑魔法,攻击漏洞,坏东西,但它确实回答了所问的问题。
–psaxton
17年11月6日在22:52
#4 楼
创建变量变量名根本没有意义。为什么?它们是不必要的:您可以将所有内容存储在列表,字典等中
它们很难创建:必须使用
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
评论
谢谢!!我需要在字典或数据框列表中选择表格。并且由于我需要根据数据框上的某个值对数据框重新排序,因此我无法使用字典形式。是的,你是对的!在某些情况下,创建变量名真的没有意义!
–杜贤信
19年2月13日在13:01
#5 楼
不要使用字典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()的返回值不是一个好主意
#6 楼
for x in range(9):
exec("string" + str(x) + " = 'hello'")
这应该工作。
#7 楼
我会使用一个列表:string = []
for i in range(0, 9):
string.append("Hello")
这样,您将有9个“ Hello”,您可以像这样单独获取它们:
string[x]
x
会在哪里标识您想要的“ Hello”。评论
与某些语言不同,您无法在Python列表中分配尚不存在的元素(您将收到“列表分配索引超出范围”错误)。您可能要使用string.append(“ Hello”)代替。
– Greg Hewgill
2011年5月31日在1:10
我早该知道的,谢谢您的提醒。它是固定的。
– Lledargo
2011年5月31日,1:15
您的权利,我正在考虑添加到字符串的末尾,而不是添加到数组。我向大家道歉。
– Lledargo
2011年5月31日在1:26
在脚步上,“您将有9个“ Hello””应该是“您将有1个” Hello” 9次。重复的是相同的字符串,而不是九个不同的字符串。
–邓肯
2011年5月31日7:57
#8 楼
我认为这里的挑战不是要调用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
#9 楼
使用字典应该是保留变量和关联值的正确方法,您可以使用以下方法:可以使用:
dict_ = {}
for i in range(9):
dict_['string%s' % i] = 'Hello'
例如,如果您想为其分配值0到8,则可以使用:
for i in range(9):
exec('string%s = Hello' % i)
#10 楼
字典可以包含值,并且可以使用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
评论
答案是您不想这样做。请改用列表。如果要在此处使用它,则可以让x = [“ Hello” * 9],然后通过x [0],x [1]进行访问...如果您想以其他方式使用它,我想您必须给我们更多的代码背景。
如果我曾经掌握过某种语言,那么在变量名中使用数字将产生SyntaxError:使用数据结构。 ;-)
并且不要忘记您的string0;)
@James Khoury:不太正确。最终将x作为包含单个元素的列表-字符串“ HelloHelloHelloHelloHelloHelloHelloHelloHelloHello”。我认为您的意思是x = [“ Hello”] *9。