从用户输入传递的多个参数保持为单个参数



我试图理解向python函数传递多个参数的机制。(我使用Python 2.7.9)

我试图分割多个用户输入参数传入一个函数,但它们都只是作为第一个值的单个参数传入:

    def foo(first,*args):
        return args, type(args)
    values = raw_input().split()
    print(foo(values))

将其保存到文件中并运行python <name of file>.py后,我有如下输出:

    $python testfunction.py 
    1 2 2 4h 5   
    (['1', '2', '2', '4h', '5'], <type 'list'>)
    ((), <type 'tuple'>)

但是如果我在脚本中像这样直接调用foo:

    def foo(first,*args):
        return args, type(args)
    print(foo(1, 2, 3, 4, 5))

然后我得到我想要的:

    $ python testfunction.py 
    (1, <type 'int'>)
    ((2, 3, 4, 5), <type 'tuple'>)
    None

为什么会发生这种情况,当我接受用户输入时,我如何才能使第二种情况发生?

split的返回值是一个列表:

>>> values = '1 2 2 4h 5'.split()
>>> values
['1', '2', '2', '4h', '5']

当您调用foo时,您将该列表作为单个参数传递,因此foo(values)foo(['1', '2', '2', '4h', '5'])相同。这只是一个参数。

为了函数应用于实参列表,我们在实参列表中使用*:
>>> print foo(*values)
(('2', '2', '4h', '5'), <type 'tuple'>)

参见Python教程中的解包参数列表。

如果在同一行中输入多个值,则必须在Python中将整个集合放在单个列表中。你可以稍后再拆分。

values = raw_input().split()
value1 = values[0]
del values[0]

这将给你想要的结果

或者如果你只是想把它单独发送给一个函数,

values = raw_input().split()
myfunc(values[0],values[1:])

相关内容

  • 没有找到相关文章

最新更新