以不同的顺序传递python参数及其变量名

时间:2016-01-24 18:19:11

标签: python arguments python-3.5

我是python的新手,并且提出了一个创建小脚本的小任务,其中必须满足一个小标准。首先,我的原始代码非常有用。我需要帮助的唯一问题是如何以一种方式设置代码,其中参数可以以任何顺序传递其各自的值(在运行脚本之前)。现在我已经检查了,并且没有关于那个具体问题的帖子所以我在这里。

对Windows 7 x64使用python 3.5.1

以下是这种情况:

该脚本将需要4个变量(所有浮点数)。 -var1,-var2,-var3,-var4

我想按如下方式运行脚本:

>> python test.py -var1 4 -var2 5.4 -var3 7 -var4 3.2

但是要求说我必须能够运行脚本,其中变量顺序无关紧要,只要该值与左侧的变量名称匹配即可。含义...

>> python test.py -var3 7 -var1 4 -var4 4.2 -var2 5.4

运行两个脚本的结果应该相同。

我无法发布我正在使用的原始代码,但这里是我需要编写代码的示例。无论运行脚本时传递的参数是什么顺序。

>     x = var1+var2
>     y = var3+var4
>     z = (x+y)/var4
>     print (str(x)) #result should always be 9.4
>     print (str(y)) #result should always be 10.2
>     print (str(z)) #result should always be 6.125

非常感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:0)

argparse模块将为您处理

  

script.py --var4 2.3 --var2 1 --var1 11.234234 --var3 0

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('--var1', action='store', type=float)
parser.add_argument('--var2', action='store', type=float)
parser.add_argument('--var3', action='store', type=float)
parser.add_argument('--var4', action='store', type=float)
args = parser.parse_args()

var1 = args.var1
var2 = args.var2
var3 = args.var3
var4 = args.var4

x = var1 + var2
y = var3 + var4
z = (x+y) / var4
print (str(x)) #result should always be 9.4
print (str(y)) #result should always be 10.2
print (str(z)) #result should always be 6.125

答案 1 :(得分:0)

这是一种自己动手的方法:

import sys

def main(var1, var2, var3, var4):
    # your code goes here
    print("var1 =", var1)
    print("var2 =", var2)
    print("var3 =", var3)
    print("var4 =", var4)

if __name__ == "__main__":
    vars = {}
    for varname, value in zip(sys.argv[1::2], sys.argv[2::2]):
        vars[varname[1:]] = float(value)
    main(**vars)

一样运行
python args.py -var2 2 -var3 3 -var4 4 -var1 1

产生

var1 = 1.0
var2 = 2.0
var3 = 3.0
var4 = 4.0