从用户输入传递的多个参数保持为单个参数
Multiple arguments passed from user input remain as single argument
我正在尝试了解将多个参数传递给 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
请问为什么会发生这种情况,当我接受用户输入时如何让第二种情况发生?
如果在同一行中输入多个值,则必须在 Python 中将整个集合放在一个列表中。顺便可以事后拆分。
values = raw_input().split()
value1 = values[0]
del values[0]
这会给你想要的结果
或者如果你只是想将它单独发送到一个函数,
values = raw_input().split()
myfunc(values[0],values[1:])
split
中的 return 值是一个列表:
>>> 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 教程中的 Unpacking Argument Lists。
我正在尝试了解将多个参数传递给 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
请问为什么会发生这种情况,当我接受用户输入时如何让第二种情况发生?
如果在同一行中输入多个值,则必须在 Python 中将整个集合放在一个列表中。顺便可以事后拆分。
values = raw_input().split()
value1 = values[0]
del values[0]
这会给你想要的结果
或者如果你只是想将它单独发送到一个函数,
values = raw_input().split()
myfunc(values[0],values[1:])
split
中的 return 值是一个列表:
>>> 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 教程中的 Unpacking Argument Lists。