Например, цели...
for x in range(0,9):
string'x' = "Hello"
Итак, я получаю строку string1, string2, string3... все равно "Hello"
Например, цели...
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
Не используйте словарь
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
не делайте этого с помощью dict
globals() имеет риск, поскольку он дает вам то, что указывает пространство имен в настоящее время, но это может измениться, и поэтому изменение возврата из 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
Здесь я использую удобное форматирование строки f в python 3. 6+
Я бы использовал список:
string = []
for i in range(0, 9):
string.append("Hello")
Таким образом, у вас будет 9 "Hello", и вы можете получить их индивидуально следующим образом:
string[x]
Где x
будет идентифицировать, какой "Hello" вам нужен.
Итак, print(string[1])
будет печатать Hello
.
Я думаю, что проблема здесь не в том, чтобы вызвать глобальный()
Я бы лично определил список ваших (динамических) переменных, которые будут храниться, и затем добавил бы его в цикл for. Затем используйте отдельный цикл for для просмотра каждой записи или даже выполнения других операций.
Вот пример - у меня есть несколько сетевых коммутаторов (скажем, между 2 и 8) на разных BRanches. Теперь мне нужно убедиться, что у меня есть способ определить, сколько коммутаторов доступно (или проверено в режиме реального времени) в любой данной ветки, а затем выполнить некоторые операции над ними.
Вот мой код:
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 sake - hard coding the site code
branchNum= "123"
switch_name(branchNum)
if __name__ == '__main__':
main()
Выход:
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07
for x in range(9): exec("string"+str(x)+" = 'hello'")
Это должно работать.