Lau*_*ent 7 python arrays exception unpack
如果要解压缩的值的数量与变量列表相比太少,有没有办法获得默认值?
例如:
a, b, c = read_json(request)
Run Code Online (Sandbox Code Playgroud)
如果read_json返回三个或更多变量的数组,则此方法有效.如果它只返回两个,我在分配时会出现异常c.那么,c如果无法正确解压缩,有没有办法设置为默认值?就像是:
a, b, (c=2) = read_json(request)
Run Code Online (Sandbox Code Playgroud)
这与使用默认参数定义函数时的操作类似.
谢谢!
您可以尝试*使用一些后处理解压缩:
a, b, *c = read_json(request)
c = c[0] if c else 2
Run Code Online (Sandbox Code Playgroud)
这将分配a并b正常.如果c分配了某些东西,它将是list一个元素.如果只解压缩了两个值,则它将为空list.c如果存在第一个元素,则第二个语句分配给它的第一个元素,2否则分配默认值.
>>> a, b, *c = 1, 2, 3
>>> c = c[0] if c else 2
>>> a
1
>>> b
2
>>> c
3
>>> a, b, *c = 1, 2
>>> c = c[0] if c else 2
>>> a
1
>>> b
2
>>> c
2
Run Code Online (Sandbox Code Playgroud)
您可以使用itertools 中的链函数,它是 Python 标准库的一部分。如果第一个列表中没有值,它将作为默认填充符。在我的示例中,'defaults' 列表变量对于您解压缩的每个变量可以有多个不同的值(在一个示例中,我将所有三个值的默认值为 0)。
from itertools import chain
defaults = [0] * 3
data = []
a, b, c, *_ = chain(data, defaults)
print(a, b, c)
data.append(1)
a, b, c, *_ = chain(data, defaults)
print(a, b, c)
data.append(2)
a, b, c, *_ = chain(data, defaults)
print(a, b, c)
data.append(3)
a, b, c, *_ = chain(data, defaults)
print(a, b, c)
data.append(4)
a, b, c, *_ = chain(data, defaults)
print(a, b, c)
Run Code Online (Sandbox Code Playgroud)
输出:
0 0 0
1 0 0
1 2 0
1 2 3
1 2 3
Run Code Online (Sandbox Code Playgroud)