2017-08-03 55 views
1

是否有可能在python中有一個字符串參數指向腳本中定義的對象?Python中,使用字符串參數來指向定義的列表/數組對象

例如,比方說我們的說法是-layers,我必須在腳本定義爲

convloop = ['conv2/3x3', 'conv2/3x3_reduce', 'conv2/3x3'] 

一個名爲convloop列表,我通過「蟒蛇example.py -layers convloop」

我需要它採取ARG字符串(convloop),並指向實際convloop列表(陣列),而不僅僅是字符串「convloop

我知道我可以做

if args.layers == 'convloop': 
    #loop over layers as set in convloop array 
    endparam = convloop[frame_i % len(convloop)] 

這將調用列表(陣列)「convloop」如果argstring是「convloop」 和循環列表

但是我有多個列表在我的劇本和,而不是每次都rewritting此代碼爲每個列表我希望它讀argstring並指向匹配列表對象,所以我可以通過例如:

python example.py -layers pooploop」和「python example.py」 -layers fartloop '並且有EM指向pooploop和fartloop列出相應

我使用Python 2.7 BTW

+2

爲什麼不直接使用數組的字典?然後你可以做'my_loop = loop_for [args.layers]'。 – melpomene

+2

將您的數據保留在您的變量名稱之外。如果你想做這樣的事情,你應該把你的列表變成一個字典,使用所需的列表名稱作爲它的關鍵字。 –

回答

2

你可以使用globals()locals(),以獲得相應的對象:

>>> oneloop = [1,2,3] 
>>> globals()["oneloop"] 
[1, 2, 3] 

你可能不應該,但:這可能是危險的。這也表明您應該重新思考腳本的體系結構。

的字典將是一個更好的主意:

>>> possible_loops = {"oneloop": [1,2,3], "twoloop": [4,5,6]} 
>>> possible_loops 
{'oneloop': [1, 2, 3], 'twoloop': [4, 5, 6]} 
>>> possible_loops['oneloop'] 
[1, 2, 3] 
+0

或者['locals()'](https://docs.python.org/2/library/functions.html#locals)如果你想訪問函數的局部變量。 – jdehesa

+0

非常感謝!字典是去我的腳本的方式! – Queef

相關問題