【问题标题】:Infinite Amount of Command Line Arguments in PythonPython 中无限量的命令行参数
【发布时间】:2017-12-11 23:44:25
【问题描述】:

我正在尝试创建一个简单的计算器,它在命令行中接受参数。例如在命令行:

Calculator.py 1 2 44 6 -add

会给我数字的总和。但是,用户如何输入无限量的参数。我知道你必须在函数中使用 *args 或类似的东西,我只是想知道如何使用 argparse 将其合并到命令行中。

【问题讨论】:

  • 你能把代码粘贴到计算器里吗? py?
  • 什么告诉你 args 的数量是有限的?传递的任何参数都只是存储在 sys.argv

标签: python argparse


【解决方案1】:

您不需要,命令行参数存储在sys.argv 中,它将为您提供命令行参数列表。你只需要总结它们。

from sys import argv

print sum(map(int, argv[1:]))  # We take a slice from 1: because the 0th argument is the script name.

然后做

python testScript.py 1 2 3
6

P.S - 命令行参数存储为字符串,因此您需要将它们map 转换为整数以对它们求和。

*args 用于需要将未知数量的值传递给函数时。考虑以下 -

>>> def testFunc(*args):
        return sum(args)

>>> testFunc(1, 2, 3, 4, 5, 6)
21

【讨论】:

  • 这不是忽略-add标志吗?
  • 你可以通过切片 argv[1:-1] 然后分别处理 argv[-1] 来获得 -add 标志?
  • 如果 OP 知道最后一个元素将是一个计算函数,他可以相应地对其进行切片并测试该函数。我在函数中添加了关于未知参数的部分。
  • 您也可以使用-add,只需从[1:-1] 中分割列表并设置一个包含标志到函数映射的字典。然后,只需将argv[1:-1] 作为列表传递给函数,并使用sum(map(int, passedArg)) 打印出总和。
  • -xxx 通常意味着该参数可以出现在该行的任何位置。 (好吧,我在这里有点像个大便......)也许抓住它并重新打包 args 列表?
【解决方案2】:
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
               help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
               const=sum, default=max,
               help='sum the integers (default: find the max)')

args = parser.parse_args()
print args.accumulate(args.integers)

https://docs.python.org/3/library/argparse.html

【讨论】:

  • 维克,谢谢。我还在弄清楚这个的格式。
  • 这是直接从文档中提取的。请来源! (除非它是相反的方式......)
猜你喜欢
  • 2016-05-31
  • 2012-02-25
  • 1970-01-01
  • 2018-06-24
  • 2018-12-17
  • 2012-02-20
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
相关资源
最近更新 更多