例として...
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
辞書を使用してこれをしないでください
globals()は、名前空間が現在何を指しているかを提供するのでリスクがありますが、これは変更される可能性があるため、globals()からの戻り値を変更することはお勧めできません
これを行う1つの方法は、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文字列フォーマットを利用しています。
私はリストを使用します:
string = []
for i in range(0, 9):
string.append("Hello")
この方法では、9つの "Hello"があり、次のように個別に取得できます。
string[x]
x
は、どの "Hello"が必要かを識別します。
したがって、print(string[1])
はHello
を出力します。
for x in range(9): exec("string"+str(x)+" = 'hello'")
これは動作するはずです。
ここでの課題はglobal()を呼び出さないことだと思います
保持する(動的)変数のリストを個人的に定義し、forループ内で追加します。次に、個別のforループを使用して、各エントリを表示するか、他の操作を実行します。
ここに例があります-さまざまなブランチにいくつかのネットワークスイッチ(たとえば2〜8)があります。ここで、特定のブランチで使用可能なスイッチの数を決定する方法(またはalive-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 __== '__main__':
main()
出力は次のとおりです。
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07