簡體   English   中英

如何在Python的for循環中使用不同的變量

[英]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 )。 我想要做的是,有一種方法,如最后一行所示,該程序標識索引為iobject_i )的變量,以用於定義Things字典thing_i的元素。

有沒有一種方法可以不必為每個變量編寫單獨的代碼行(如下所示)?

Things['thing_1'] = object_1
Things['thing_2'] = object_2
Things['thing_3'] = object_3

更新的編輯和說明 :之所以無法使用字典來定義object_1object_2object_3是因為它們實際上並未在Python腳本中定義。 我必須從Salome(3D建模程序)文件中調用它們,在其中將它們索引為Face_1Face_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM