我有一个定义如下的函数:
def foo(arg1, *args):
print type(args), args
有人能解释一下通过以下两种方式传递expectedResults
来调用foo
的区别吗:
expectedResults = ['RESULT1', 'RESULT2']
foo(res, expectedResults)
打印以下内容
<type 'tuple'> (['RESULT1', 'RESULT2'],)
当传递带有星号的expectedResults
时
foo(res, *expectedResults)
我明白了
<type 'tuple'> ('RESULT1', 'RESULT2')
我的问题是:为什么在传递expectedResults
时不加星号,而传递with时行为会发生变化
*expectedResults
在发送内容之前先解压列表。这就像说
foo(res, 'RESULT1', 'RESULT2')
,而foo(res, expectedResults)
只是将列表本身作为一个参数传递,结果是一个元组有一个元素所以呢
相当于
将两个字符串都放入*args参数中,然后
相当于
将列表放在*args参数中
当您有*args时,该方法将自动从参数中创建一个列表,因此即使您向它传递一个列表,它也只会将整个列表插入到tuple中(因此您在args中有一个元素,list expectedResults)。当您使用asterix传递参数时,您将传递列表中的内容
因此foo(res,expectedResults)与传递res,['RESULT1','RESULT2'](然后可以发送多个列表)相同,而foo(res,*expectedResults)与执行foo(res,'RESULT1','RESULT2')相同
相关问题 更多 >
编程相关推荐