我试图创建一个'append‘方法,但是我得到了这个错误:
FAIL LinkedList/Combining [1] with [] yields list of length 1
Exception TypeError raised: unsupported operand type(s) for +: 'LinkedList' and 'NoneType'
File "<string>", line 104, in _我不确定什么是“收益”,也不知道如何在这种情况下使用它。这就是我们尝试做的事情:
def __init__(self,value,next=None):
self.__value=value
self.__next=next
def __append__(self,lst):
if self.next is None:
yield LinkedList(value,lst)
else:
self.head= lst + self.next
yield self.head这就是我在Java中尝试做的事情:
public LinkedList append(LinkedList lst)
{
if ( next == null )
{
return new LinkedList(value, lst);
}
else
{
return new LinkedList(value, next.append(lst));
}
}发布于 2018-08-28 02:58:38
yield仅在生成器上下文中使用。在一个普通的函数中,你只需要返回一个带有return val的值,因为只返回一个值。
此外,如果要使用+运算符,则正确的方法是def __add__(self, other)
如果您对生成器感兴趣,可以提供一些简短的信息
以下函数是一个生成器函数:
def yieldNumbers(limit);
for i in range(limit):
yield i 生成器很有用,因为它们允许您逐个请求值。这与以下情况相反:
def listNums(limit)
r = []
for i in range(limit):
r.append(i)
return r在这里,函数生成所有的值并一次返回所有值。在处理大量数据时,这是一个问题,因为它可能会使用大量内存。相反,生成器,正如我所说的,产生值1乘以1,并且只有在被调用时:所以生成器函数产生一个值,并记住它在循环中的位置,并从它停止的地方继续。请考虑以下几点:
def printNums((:
print(1)
yield
print(2)
yield
print(3)
yield
>>> n = printNums()
>>> next(n)
1
>>> next(n)
2
>>> next(n)
3
>>> next(n)
StopIteration # that's an error raised when there's
# no more values left to yield生成器使用调用生成器的gen.__next__()内部方法的next(gen)方法。如果你想实现一个行为像迭代器的对象,这是很有用的。但是,如果您想要完成此操作,则应该定义一个名为__iter__的方法,该方法通常只返回self
https://stackoverflow.com/questions/52045288
复制相似问题