这可能是一个愚蠢的问题,但我无法从搜索中找到任何内容。
我知道如果我想将返回的元组解压缩为多个变量,语法是A,B = myfunction()
如果我的函数返回列表元组,例如( [1], [2] )
,并且我想为我的变量分配整数1
和2
而不是列表[1]
和[2]
怎么办?是否有速记一行,或者我需要做
A, B = myfunction()
A = A[0]
B = B[0]
提前感谢您的帮助。
使用相同的结构:
[A], [B] = myfunction()
演示:
>>> def myfunction():
return ( [1], [2] )
>>> [A], [B] = myfunction()
>>> A
1
>>> B
2
关于DeepSpace的评论">这将创建2个新列表">:它没有:
>>> import dis
>>> dis.dis('[A], [B] = myfunction()')
1 0 LOAD_NAME 0 (myfunction)
2 CALL_FUNCTION 0
4 UNPACK_SEQUENCE 2
6 UNPACK_SEQUENCE 1
8 STORE_NAME 1 (A)
10 UNPACK_SEQUENCE 1
12 STORE_NAME 2 (B)
14 LOAD_CONST 0 (None)
16 RETURN_VALUE
创建列表的样子如下:
>>> dis.dis('[A]')
1 0 LOAD_NAME 0 (A)
2 BUILD_LIST 1
4 RETURN_VALUE
背景很重要。
使用参数,以便可以从外部控制索引。
def myfunction(a_index=None, b_index=None):
...
if a_index is None and b_index is None:
return a, b
return a[a_index], b[b_index]
然后
A, B = myfunction(0, 0)
这是一个可重用的解决方案。如果需要其他索引:
A, B = myfunction(2, 1)
这不支持混合(即仅传递a_index
或b_index
(,但如果您需要该行为,您可以轻松添加它。
实现此结果的方法之一是展平数据。我会按照以下方式做:
def myfunction():
return ([1],[2])
A,B = (i[0] for i in myfunction())
print(A) # 1
print(B) # 2
Python 中还有其他扁平化方法,但对于您的情况下使用的 2D 结构(列表元组(,for
完全足够了。