这可能是一个基本问题,但不幸的是我在搜索时无法得到任何东西。
我有一个函数,当函数在命令行上运行时,使用*args
来捕获参数。
基本结构如下:
def func(*args):
<code starts>
...
</code ends>
func("arg1", "arg2", "arg3")
问题在于,如果我在代码文件中传递参数,代码就可以工作,如上面的代码片段所示。我正在研究如何从命令行实际运行此代码,参数如下:
# python <file.py> arg1 arg2 arg3
为此,我明白我应该在代码文件本身中更改'func(“arg1”,“arg2”,“arg3”)'行,但我不确定它是怎么回事。
有人可以指出我如何纠正这个问题。
非常感谢
注意:两种解决方案都有效,是的,两者都是相同的。可惜我无法接受这两个答案。
答案 0 :(得分:7)
sys.argv[1:]
会将所有命令行参数作为列表提供。
因此,您可以在代码中执行func(*sys.argv[1:])
以接收所有参数。但是,没有充分的理由使用varargs - 只需让函数接受列表args
并直接传递sys.argv[1:]
。
答案 1 :(得分:6)
当调用函数时,你会使用类似的语法:
func(*sys.argv[1:])
此处*
列表前的sys.argv
将列表扩展为单独的参数。
sys.argv
list本身包含命令行中找到的所有参数,包括脚本名称;从第二个项目开始切片将为您提供所有传入的选项,而无需脚本名称。