我是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
非常感谢任何帮助。 感谢
答案 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