0

我试图了解将多个参数传递给 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

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

4

2 回答 2

0

如果在同一行中输入了多个值,则必须将整个集合放在 Python 中的单个列表中。顺便说一句,你可以在之后拆分它。

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

这会给你想要的结果

或者,如果您只想将其单独发送到函数,

values = raw_input().split()
myfunc(values[0],values[1:])
于 2015-08-26T16:59:40.300 回答
0

from 的返回值split是一个列表:

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

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

为了函数应用于参数列表,我们*在参数列表中使用 a :

>>> print foo(*values)
(('2', '2', '4h', '5'), <type 'tuple'>)

请参阅Python 教程中的解包参数列表

于 2015-08-27T07:11:41.873 回答