使用* args而不将参数放入元组中?

时间:2013-03-12 19:04:27

标签: python list python-3.x arguments tuples

这是我的代码:

def main(*args):
    # The following code will look for arguments and record their start and
    # end positions.
    arg = False
    arg_invalid = False
    arg_start = -1
    arg_end = -1
    i = 1

    print("main args = " + str(args))

......剥离了不相关的代码......

if __name__ == "__main__":
    print("sys args = " + str(sys.argv))
    print("tuple'd args = " + str(tuple(sys.argv)))
    main(sys.argv)

输出:

$ ./gmanager.py foo bar 128
sys args = ['./gmanager.py', 'foo', 'bar', '128']
tuple'd args = ('./gmanager.py', 'foo', 'bar', '128')
main args = (['./gmanager.py', 'foo', 'bar', '128'],)

如您所见,在调用main()之后,main()将其参数放入元组中。我不希望这样,因为它使复杂的参数/字符串引用(arg[x][y][z])。

有没有办法在我的main()函数中接受参数作为它们的先前状态,还是可以从我的参数之外删除元组?

2 个答案:

答案 0 :(得分:2)

直接传递列表:

def main(args):
    ...

main(sys.argv)

或使用*执行参数解包:

def main(*args):
    ...

main(*sys.argv)

后者对于测试非常有用,因为你可以编写例如。

main('foo', 'arg1', 'arg2')

模拟命令行参数。

答案 1 :(得分:1)

由于您只需要一个参数main(),并且您希望它是list,只需删除*中的def main,如下所示:< / p>

def main(args):
  print str(args)

if __name__ == "__main__":
  import sys
  main(sys.argv)