【发布时间】:2014-03-04 02:51:17
【问题描述】:
如果使用sys.argv,是否有任何理由使用*arg 或者sys.argv 能够做*arg 会做的所有事情?
例如:
>>>def test(*arg):
>>> return arg
>>>
>>>print test('hello','salut','hola')
>>>('hello','salut','hola')
当我在从命令行调用的名为 trial.py 的文件中使用 sys.argv 时:
import sys
def test(argument):
return argument
print test(sys.argv[1])
python trial.py 'hello','salut','hola'
hello,salut,hola
或者argv 是否真的适合只接收一个参数,argv 是否有可能拥有超过 2 个 items(argv[0],argv[1])?
【问题讨论】:
-
你混淆了两个完全不同的东西。对于初学者,
*arg不是变量。这是一个命令,意思是“解压变量arg的内容。你可以很容易地做到*foo或*bar。 -
@JoelCornett 我意识到我可以在这里使用 *anything 作为变量的名称,
*会解压它。我想知道的是,当使用 argv 时,它似乎也需要多个参数。 -
@tijko:
sys.argv不接受任何参数。这不是一个函数。它只是一个字符串列表。当您执行脚本时,python 会将脚本名称后面的所有命令行参数放入一个列表中。您可以像这样(如果需要)_, first_arg, second_arg = sys.argv解压缩此列表,或者您可以将它们解压缩为函数的参数,例如test(*sys.argv). -
@Joel Cornett 您对 sys.argv 的解释非常有帮助。我不认为它是`[script.py,第一,第二,第三]。如果您在下面阅读我的 cmets,我在引号和逗号中加上了使它成为一个长字符串:|