我试图理解向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:])