[英]How to use different variables in a for loop in Python
我試圖在for
循環中使用具有不同名稱的變量。 在我解釋其他問題之前,請允許我說這不是我遇到的問題。 是的,我基於for
循環的索引創建了不同的變量,但是我從中了解到如何做到這一點。
我不知道該怎么做是如何在for
循環中調用不同的變量。 我的意思是我想要這樣的東西:
# pre-defined variables
object_1 = 7
object_2 = 8
object_3 = 51
# create new dictionary
Things = {}
# populate dictionary
for i in range(1,4):
Things['thing_%d'%i] = object_i
所以我知道如何創建單獨的新變量(使用字典Things
)。 我想要做的是,有一種方法,如最后一行所示,該程序標識索引為i
( object_i
)的變量,以用於定義Things
字典thing_i
的元素。
有沒有一種方法可以不必為每個變量編寫單獨的代碼行(如下所示)?
Things['thing_1'] = object_1
Things['thing_2'] = object_2
Things['thing_3'] = object_3
更新的編輯和說明 :之所以無法使用字典來定義object_1
, object_2
和object_3
是因為它們實際上並未在Python腳本中定義。 我必須從Salome(3D建模程序)文件中調用它們,在其中將它們索引為Face_1
, Face_2
等。我希望將所有內容都放在數組元素中(消除了對單獨變量的需求),但是為了做到這一點那,我仍然需要從Salome調用對象。 我目前在Salome Python控制台中正在運行一個腳本,該腳本的開頭是這樣的,因此我可以從Salome研究中訪問對象:
# Salome testing
import salome
salome.salome_init("C:\Users\Me\Study3.hdf")
import GEOM
from salome.geom import geomBuilder
geompy = geomBuilder.New(salome.myStudy)
# need to retrieve all objects from that study -----------
go = salome.myStudy.FindObjectByPath("/Geometry")
it = salome.myStudy.NewChildIterator( go )
it.InitEx(True)
while it.More():
so = it.Value()
it.Next()
go = so.GetObject()
if go:
#print(so.GetName())
exec( "%s = go"%so.GetName() )
您可以使用內置方法globals() ,它將通過以下方式返回{'object_name':object_value}
的字典:
default_value = 0
for i in range(1,4):
Things['thing_%d'%i] = globals().get('object_%d' % i, default_value)
該default_value
有萬一變量不存在,這將返回default_value
提高,而不是KeyError
例外
您可以遍歷這些變量的值:
variables = (object_1, object_2, object_3)
Things = {}
for i, value in enumerate(variables):
Things['thing_%d' % i] = value
那時,您還可以使用字典理解:
Things = { 'thing_%d' % i: value for i, value in enumerate(variables) }
但是以動態方式訪問變量而不先指定變量通常是一個壞主意,也是設計不好的標志。 然后,您應該首先更改這些變量的創建方式。
以下是您要做的一種方式
object_1 = 7
object_2 = 8
object_3 = 51
Things = {}
for i in range(1,4):
Things['thing_%d'%i] = globals()['object_%d'%i]
您可以使用字典來代替三個不同的變量,以鍵為object_i
並將值作為其值。 范例-
objects = {'object_1':7,
'object_2':8,
'object_3':51}
然后,您可以訪問字典值,就像將要為“ Things
列表創建鍵一樣-
for i in range(1,4):
Things['thing_%d'%i] = objects['object_%d'%i]
上面是更好的解決方案之一,但是如果由於某種原因您不能使用字典,則可以使用globals()
函數,該函數返回(全局變量的)全局名稱空間作為字典,然后可以使用字符串訪問變量。 范例-
object_1 = 7
object_2 = 8
object_3 = 51
# create new dictionary
Things = {}
gbl = globals()
# populate dictionary
for i in range(1,4):
Things['thing_%d'%i] = gbl['object_%d'%i]
您也可以這樣嘗試:
>>> object_1 = 7
>>> vars()['object_1']
7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.