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

passing python arguments in different order along with its variable name

我是 python 的新手,我的任务是创建一个必须满足小条件的小脚本。首先,我的原始代码效果很好。我需要帮助的唯一问题是如何以某种方式设置代码,使参数可以按任何顺序以其各自的值传递(在 运行 脚本之前)。现在我已经检查过了,没有 post 关于那个具体问题,所以我来了。

将 python 3.5.1 用于 windows 7 x64

情况如下:

该脚本将需要 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

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

我不能 post 我正在使用的原始代码,但这里有一个示例,说明我需要如何编写代码才能正常工作。无论在 运行 脚本时传递参数的顺序如何。

>     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

如有任何帮助,我们将不胜感激。 谢谢

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

这是一个 roll-your-own 方法:

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