Python 使用*args解包返回函数参数

Python 使用*args解包返回函数参数,python,function,args,Python,Function,Args,想了解一些关于如何使用*args在其他函数中正确解包返回参数的指导吗?这就是代码 #!/usr/bin/python def func1(): test1 = 'hello' test2 = 'hey' return test1, test2 def func2(*args): print args[0] print args[1] func2(func1) 我收到的错误消息 <function func1 at 0x7fd

想了解一些关于如何使用*args在其他函数中正确解包返回参数的指导吗?这就是代码

 #!/usr/bin/python

def func1():

    test1 = 'hello'
    test2 = 'hey'

    return test1, test2


def func2(*args):

    print args[0]
    print args[1]

func2(func1)
我收到的错误消息

    <function func1 at 0x7fde3229a938>
Traceback (most recent call last):
  File "args_test.py", line 19, in <module>
    func2(func1)
  File "args_test.py", line 17, in func2
    print args[1]
IndexError: tuple index out of range

回溯(最近一次呼叫最后一次):
文件“args_test.py”,第19行,在
职能2(职能1)
文件“args_test.py”,第17行,在func2中
打印参数[1]
索引器错误:元组索引超出范围

我尝试了一些方法,如
args()
,但没有成功。尝试解包时我做错了什么?

func2接受多个参数,而您在代码中只指定了一个参数

通过打印所有
参数
,您可以很容易地看到是否存在错误。您还可以看到,它无法打印
args[1]
而不是
args[0]
,因为您向该函数传递了一个参数。

您没有调用
func
,因此您的
func2
实际上得到了一个参数,它是一个函数对象。将代码更改为:
func2(*func1())

#同时,也要解压结果,以便将hello和hey解释为两个单独的字符串参数,而不是一个元组参数
>>>func2(*func1())
你好
嘿
>>>职能2(职能1)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
职能2(职能1)
文件“”,第4行,在func2中
打印参数[1]
索引器错误:元组索引超出范围
供参考:

>>> func1
<function func1 at 0x11548AF0>
>>> func1()
('hello', 'hey')
>>> 
>>func1
>>>func1()
(‘你好’、‘嘿’)
>>> 

试试
func2(func1())
你的意思是
func2(*func1())
@dipakhandranp:)@Bahrom不,只是没有
*
,比如:
func2(func1())
如果不起作用,你仍然会给它一个元组,它将解释为唯一的参数。
func2(*func1())
:你能解释一下这句话的确切含义吗<代码>*在这上面
*
是解包运算符,它将
func1()
的元组输出解包为两个参数。假设
func1
返回
(1,2)
如果您只执行
func2(func1())
,您实际上正在调用
func2((1,2))
(注意只有一个参数,恰好是两个元素的元组)。调用
func2(*(1,2))
将该元组解压为两个参数,结果是
func2(1,2)
。哦,谢谢。像这样的权利:
>>f2(f1())
((2,4),)
>f2(*f1())
(2,4)
是的,在一种情况下你有
f((2,4),)
,在未打包的版本中你有
f(2,4)
,谢谢你的解释。
>>> func1
<function func1 at 0x11548AF0>
>>> func1()
('hello', 'hey')
>>>