任何人都可以尝试向我解释以下代码的工作方式吗?据我了解,解压缩就像a, b, i = [1,2,3]
一样,但是以下代码如何获取x?我尝试调试是否有x = iter(collections.deque([1,2,3,4,5], maxlen=1))
<_collections._deque_iterator对象位于0x01239>
import collections
x, = iter(collections.deque([1,2,3,4,5], maxlen=1))
答案 0 :(得分:1)
这是一个简单的例子
>>> x = [24]
>>> x
[24]
>>> x, = [24]
>>> x
24
>>> x, y = [24, 96]
>>> x
24
>>> y
96
这与您的示例等效,因为如果您执行list(iter(collections.deque([1,2,3,4,5], maxlen=1)))
,它只是一个包含一个元素[5]
的列表。
您是正确的,这是在拆箱。您可以将其编写为(x,)
,以便在x,
令人困惑的情况下看起来更像元组。 x后面的逗号使x
指向first element of a tuple with one element。
答案 1 :(得分:0)
您的上面的代码为我生成x = 5,而不是迭代器对象。
通常,对于迭代器对象(例如生成器),使用next()
的效果
这是斐波那契数列的一个简短示例。使用yield
会生成一个生成器对象。
def iterative_fib(n):
a,b = 0,1
i=1
while i<n:
a, b = b, a+b
# print(b)
i+=1
yield b
x = iterative_fib(50)
next(x) # 12586269025
我不确定100%具体针对您的情况,但是请尝试使用next
,因为next
需要迭代器。如果这不起作用,那么可能会产生一个代码示例来复制您的问题。
next()
的文档:https://docs.python.org/3/library/functions.html#next
编辑:
看到有关拆箱清单的其他答案,这是使用*
的其他方式:
a = [1,2,3,4,5]
a,b,c,d,e = [1,2,3,4,5] # you already mentioned this one
a, *b = [1,2,3,4,5] # a =[1], b=[2, 3, 4, 5]
a, *b, c, d = [1,2,3,4,5] #a =[1], b=[2,3], c=[4], d=[5]
*a, b, c = [1,2,3,4,5] # a=[1,2,3], b=[4], c=[5]
#But this wont work:
a, *b, *c = [1,2,3,4,5] # SyntaxError: two starred expressions in assignment