2016-11-10 79 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]