Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理不同数量的返回变量_Python - Fatal编程技术网

Python 处理不同数量的返回变量

Python 处理不同数量的返回变量,python,Python,我希望在一组目标变量中处理调用函数返回的不同数量的值。下面的简化代码段是一个开始说明: def f1(): return 1,2,3 def f2(): return 4,5 a,b,c = f1() a,b,c = f2() # How to massage this call: default of some sort? 因此,我们的目标是将2个或3个结果分解为三个输出变量 请考虑被调用的f()可能是(许多函数..)中的一个,它们大多只返回两个变量。。但有必要为其中的一个或两个添加

我希望在一组目标变量中处理调用函数返回的不同数量的值。下面的简化代码段是一个开始说明:

def f1(): return 1,2,3

def f2(): return 4,5

a,b,c = f1()

a,b,c = f2()  # How to massage this call: default of some sort?
因此,我们的目标是将2个或3个结果分解为三个输出变量

请考虑被调用的
f()
可能是(许多函数..)中的一个,它们大多只返回两个变量。。但有必要为其中的一个或两个添加第三个参数

这里的动机是:现有的代码库目前只返回两个变量。但我需要加上第三个。让现有的代码基本上保持独立,简单地优雅地处理缺少的第三个参数,这将是很有帮助的


这里可以使用什么构造?

您正在解包这两个函数的结果,而不是这样做,您可以将结果分配给单个变量,然后测试其长度。很像这里:


通常,您可以将所有返回值保存到单个变量中,然后使用索引访问它们

x1 = f1()  # x1[0] = 1, x1[2] = 2, etc.
x2 = f2()
对于Python 3: 如果需要对单独的代码段使用
a、b、c
,可以使用以下方法打包变量:

a,b,*c = f1()
a,b,*c = f2()
这将捕获
f1
f2
返回的前2个以外的所有值,作为
c
中的列表

任何python: 如果您使用的是2.7版,您可以采取一些额外的步骤来确保分配
c
不会出现错误。将函数的输出捕获为列表,然后使用
None
将列表扩展到变量的长度。之后,您可以直接分配给
a、b、c

# assumes you have 3 variables: a,b,c
res = list(f2())
res += [None]*(3-len(res))
a,b,c = res

问题在于将2个或3个结果解包成三个输出变量
f1
f2
是现有代码结构的代表,该结构具有许多函数,每个函数处理一个特定案例,每个函数返回两个结果值。
a
b
(以及满怀希望的
c
)是在随后的逻辑中使用的返回值。啊-这是python 3.x构造吗?我使用的是2.7,解释器似乎对
*c
不满意是的,这是python 3。好的-对我过时的2.7;)有什么建议吗我可能需要做我想的索引工作。为2.7Ya添加了一些东西-我已经做了一些类似的事情。谢谢你充实了这一点——为了未来的读者。你的答案和詹姆斯的答案都提到了索引——这可能是我需要做的。他的结果实际上非常完美——但只适用于python 3。
# assumes you have 3 variables: a,b,c
res = list(f2())
res += [None]*(3-len(res))
a,b,c = res