返回多值的函数能否直接用作其他函数的参数?报错咨询
问题解答:用返回多值的函数作为另一个函数的参数
当然可以直接用返回多值的函数作为另一个函数的参数!你遇到的报错是因为Python的默认行为:one()返回的其实是一个元组(哪怕你写的是return 3,2,Python会自动把它打包成元组(3,2)),直接把这个元组传给two()时,它会被当成单个参数,但two()需要两个独立的位置参数,所以才会抛出TypeError。
解决方法:使用解包操作符 *
只需要在调用one()的时候加上*,它会把元组里的元素逐个拆成独立的参数传递给two(),代码修改如下:
def one(): return 3, 2 # 实际返回元组 (3, 2) def two(a, b): return a + b # 用 * 解包元组,将3和2分别传给a和b print(two(*one())) # 输出:5
额外拓展
这个解包操作不止适用于元组,任何可迭代对象(比如列表、集合、生成器)都可以用*来解包作为位置参数:
def two(a, b): return a + b # 用列表示例 def three(): return [4, 5] print(two(*three())) # 输出:9
如果你的函数返回的是键值对形式的字典,还可以用**来解包作为关键字参数:
def four(): return {"a": 6, "b": 7} def two(a, b): return a + b print(two(**four())) # 输出:13
内容的提问来源于stack exchange,提问作者dr jerry
相关产品推荐
相关产品推荐

