【问题标题】:Python, Use a string argument to point to defined list/array objectPython,使用字符串参数指向定义的列表/数组对象
【发布时间】:2018-01-11 06:51:44
【问题描述】:

是否可以在 python 中让字符串参数指向脚本中定义的对象?

例如,假设我们的参数是 -layers,我有一个名为 convloop 的列表在脚本中定义为

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

我通过'python 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)]

如果 argstring 是 'convloop',这将调用列表(数组)'convloop' 并循环浏览列表

但是我的脚本中有多个列表,而不是每次为每个列表重写此代码,我希望它读取 argstring 并指向匹配的列表对象,以便我可以传递例如:

'python example.py -layers pooploop' 和 'python example.py' -layers fartloop' 并让它们相应地指向 pooploop 和 fartloop 列表

我正在使用 python 2.7 顺便说一句

【问题讨论】:

  • 为什么不直接使用数组字典呢?然后你可以做my_loop = loop_for[args.layers]
  • 把你的数据放在变量名之外。如果你想做这样的事情,你应该把你的列表放入一个字典中,使用所需的列表名称作为它的键。

标签: python string object arguments call


【解决方案1】:

您可以使用globals()locals() 来获取对应的对象:

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

不过,您可能不应该这样做:这可能很危险。这也表明您应该重新考虑脚本的架构。

dict 会是更好的主意:

>>> 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]

【讨论】:

  • 或者locals(),如果你想访问一个函数的局部变量。
  • 非常感谢!字典是我剧本的必经之路!
猜你喜欢
  • 1970-01-01
  • 2013-07-23
  • 2019-12-27
  • 2014-07-27
  • 2015-07-15
  • 2012-11-07
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多