【问题标题】:how to have multiple arguments to multiple variables for a function如何为函数的多个变量提供多个参数
【发布时间】:2022-01-17 04:46:52
【问题描述】:

我正在尝试通过 argparse 将多个参数用于函数中 我希望将参数放在下面的函数中

def toto(var1,var2,var3):
    print(var1,var2,var3)

这是我的参数解析

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--names', type=str,nargs=1, help='<Required> Set flag')
args = parser.parse_args()    

问题是我需要三个参数。

我把函数放在像hello.py这样的文件中

if __name__ == "__main__":
    print(args)
    if args.names:
        toto(var1,var2,var3)

然后我运行命令

python hello.py --names 'bobo'

我有这个错误

Traceback (most recent call last):
  File "hello.py", line 15, in <module>
    toto(var1,var2,var3)
NameError: names 'var1' is not defined

发生了什么?如何添加三个参数而不是一个?

谢谢

【问题讨论】:

  • 在您的代码中添加print(args)。我希望看到Namespace(name=['bobo'])。您定义了参数,并指定了nargs=1。所以args.name 将是['bobo']。我看不出您希望从哪里获得 var1 等。
  • @hpaulj 完成。查看更新的代码。
  • 似乎 (a) 语法错误,因为您的 var1 之类的变量都没有被分配/定义,(b) 参数的数量被限制为 nargs=1 而不是想要 3,( c) 解析的参数arg.name 从未传递给您的函数toto(甚至没有传递)。

标签: python argparse


【解决方案1】:

首先,您需要在命令行上指定argparse 应接受的参数数量,在本例中为三个nargs=3

parser.add_argument('--names', type=str,nargs=3, help='<Required> Set flag')

变量将存储在args.names,在这种情况下是一个列表,因此您可以将该列表解压缩为三个变量:

if __name__ == "__main__":
    if args.names:
        var1, var2, var3 = args.names
        toto(var1, var2, var3)

最后,像下面这样运行它,它会给你正确的结果:

~$ python hello.py --names 'babi' 'bibo' 'bobu'
babi bibo bobu

【讨论】:

  • 您的回答很好地说明了docs of nargs,.. 但是您应该以单数args.name 或复数形式引用参数'--name''--names',这将很好地表达预期的列表。那么像`toto(*args.names)`这样解压是正确的吗?
  • hi @hc_dev 同意变量的名称。对于文档,实际上似乎并不那么清楚。我对这个问题的第一次尝试遭到了“蔑视”,即使这个词很强烈但我坚持下去。这就是我想出这个问题和答案以使该主题更加清晰的原因。干杯。
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
相关资源
最近更新 更多