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