以不同的顺序传递 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
我是 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