2017-08-03 61 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

相关问题