首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python LinkedList yield

Python LinkedList yield
EN

Stack Overflow用户
提问于 2018-08-28 02:45:22
回答 1查看 62关注 0票数 0

我试图创建一个'append‘方法,但是我得到了这个错误:

代码语言:javascript
复制
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 _

我不确定什么是“收益”,也不知道如何在这种情况下使用它。这就是我们尝试做的事情:

代码语言:javascript
复制
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中尝试做的事情:

代码语言:javascript
复制
public LinkedList append(LinkedList lst)
{
    if ( next == null )
    {
        return new LinkedList(value, lst);
   }
    else
    {
        return new LinkedList(value, next.append(lst));
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-08-28 02:58:38

yield仅在生成器上下文中使用。在一个普通的函数中,你只需要返回一个带有return val的值,因为只返回一个值。

此外,如果要使用+运算符,则正确的方法是def __add__(self, other)

如果您对生成器感兴趣,可以提供一些简短的信息

以下函数是一个生成器函数:

代码语言:javascript
复制
def yieldNumbers(limit);
    for i in range(limit):
        yield i 

生成器很有用,因为它们允许您逐个请求值。这与以下情况相反:

代码语言:javascript
复制
def listNums(limit)
    r = []
    for i in range(limit):
        r.append(i)
    return r

在这里,函数生成所有的值并一次返回所有值。在处理大量数据时,这是一个问题,因为它可能会使用大量内存。相反,生成器,正如我所说的,产生值1乘以1,并且只有在被调用时:所以生成器函数产生一个值,并记住它在循环中的位置,并从它停止的地方继续。请考虑以下几点:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52045288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档