2016-11-10 55 views
0

我有以下蟒蛇​​解析器:遍历参数在Python解析器

pointparser = argparse.ArgumentParser(add_help=False) 
pointparser.add_argument("-a", "--a_value", default="NaN", nargs="?", 
         type=float) 
pointparser.add_argument("-b", "--b_value", default="NaN", nargs="?", 
         type=float) 
... 
pointparser.add_argument("-j", "--j_value", default="NaN", nargs="?", 
         type=float) 
data_point = pointparser.parse_args(parameterlist) 
datapoint=[data_point.a_value, data_point.b_value, data_point.c_value, 
      data_point.d_value, data_point.e_value, data_point.f_value, 
      data_point.g_value, data_point.h_value, data_point.i_value, 
      data_point.j_value] 

是否可以遍历所有的参数的-J,并直接将它们存储在列表中。这样一来,我可以离开参数的个数开放,即只去-c甚至-k

+0

你真正关心他们被命名为A,B,C等,或者你只是想用户能够运行例如'python yourthing.py one two three'并列出'['one','two','three']'? – jonrsharpe

+0

你真的不应该有一个变量'datapoint'和另一个'data_point'。 –

+0

'nargs'有点奇怪。似乎没有任何理由可以在没有参数的情况下指定选项,因为它完成了与完全不指定它相同的功能。 – chepner

回答

1
import argparse 
import math 

pointparser = argparse.ArgumentParser(add_help=False) 
pointparser.add_argument("-a", "--a_value", default="NaN", nargs="?", 
         type=float) 
pointparser.add_argument("-b", "--b_value", default="NaN", nargs="?", 
         type=float) 
pointparser.add_argument("-j", "--j_value", default="NaN", nargs="?", 
         type=float) 
data_point = pointparser.parse_args() 
datapoint = [value for key, value in sorted(vars(data_point).items()) 
      if not math.isnan(value)] 
print(datapoint) # [1.0, 2.0]