如何在循环中创build不同的variables名称? (python)

为了举例…

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

所以我最终与string1,string2,string3 …都等于“你好”

你当然可以; 它被称为字典 :

 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'} 

我说过这个问题,但是将一个值与另一个值联系起来的最好方法是字典。 这就是它的devise目的!

这真是个坏主意,但是…

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

然后例如:

 print(string3) 

会给你:

 Hello 

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

创build可变variables名称是毫无意义的。 为什么?

  • 它们是不必要的:您可以将所有内容存储在列表,词典等中
  • 他们很难创build:你必须使用execglobals()
  • 你不能使用它们:你如何编写使用这些variables的代码? 你必须再次使用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 

我会用一个列表:

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

这样,你会有9“你好”,你可以像这样单独得到他们:

 string[x] 

在哪里x将标识哪个“你好”你想要的。

所以, print(string[1])会打印Hello

不要这样做使用字典

 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 

不要这样做使用字典

全局variables()有风险,因为它给你什么名字空间当前指向,但这可以改变,所以修改从globals()返回不是一个好主意

你可以做的一个方法是使用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+中的方便的fstring格式