这个问题应该很容易回答,但我没有找到任何/不知道如何搜索。
def testcall(function, argument):
function(*argument)
testcall(print, "test")
# output:
t e s t
为什么t e s t
而不是test
?
答案 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