使用函数和参数作为函数的参数 - 奇怪的行为?

时间:2014-02-06 21:09:39

标签: python python-3.x

这个问题应该很容易回答,但我没有找到任何/不知道如何搜索。

def testcall(function, argument):
    function(*argument)

testcall(print, "test")
# output:
t e s t

为什么t e s t而不是test

2 个答案:

答案 0 :(得分:4)

您正在使用splat syntax*argument)将argument分解为单个字符。然后,您将这些字符传递给print。这与做的没什么不同:

>>> print('t', 'e', 's', 't')
t e s t
>>>

删除*以解决问题:

>>> def testcall(function, argument):
...     function(argument)
...
>>> testcall(print, "test")
test
>>>

答案 1 :(得分:4)

你的splats是不对称的。它应该是:

def testcall(function, *argument):
    function(*argument)

一般情况下,如果你希望你的函数表现得像另一个函数,它应该接受一个splat并发送一个splat。 This answer explains the general case