【发布时间】:2013-02-28 11:31:11
【问题描述】:
这是我的代码:
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() 函数中接受参数作为它们的先前状态,或者我可以从我的参数之外剥离元组?
【问题讨论】:
-
*前缀可以双向工作:if __name__ == '__main__': main(*sys.argv) -
如果这不能回答你的问题,你必须更清楚你想要完成什么。
main()中的哪些变量需要绑定到sys.argv的哪些部分? -
我的论点是
sys.argv中的任何内容。在他们被叫到main()之前,他们是一个列表([])。在main()中调用它们后,它们是元组 (([])) 中的列表。我只想要清单。 -
这是一个令人困惑的描述。不要使用散文。创建一个代码示例,显示最终应该是什么的值,即使您不知道如何达到这一点。
-
哦,我才明白你第一条评论的意思。我没有意识到
*扩展了一个列表——我认为它只是为它腾出了空间。如果您想将其放在答案中,那么我可以投票。
标签: python list python-3.x arguments tuples