在条件python的参数中修改变量

时间:2018-05-05 00:53:55

标签: python python-3.x

我有一个while循环,对另一个类提供的输出进行操作,直到没有输出为止。

while a.is_next():
   fn(a.get_next())

有没有办法检查是否存在新项目。 "装载"它在同一时间?

while b=a.get_next():
  fn(b)

4 个答案:

答案 0 :(得分:4)

看起来你正试图重新发明iterator。迭代器必须有两个方法:一个__iter__方法返回迭代器本身,一个__next__方法返回下一个项目或引发StopIteration。例如

class MyIterator:
    def __init__(self):
        self.list = [1, 2, 3]
        self.index = 0
    def __iter__(self):
        return self
    def __next__(self):
        try:
            ret = self.list[self.index]
            self.index += 1
            return ret
        except IndexError:
            raise StopIteration

这个例子很多,但它允许我们在Python期望迭代器的每个地方使用该迭代器

for x in MyIterator():
    print(x)

1
2
3

答案 1 :(得分:3)

  

有没有办法检查是否存在新项目。 “加载”它同时?

简短的回答是否定的。 Python赋值不能代替while循环的条件语句。但是,为什么不简单地在每次迭代时将a.get_next()的值重新分配给变量,并将其用作循环条件:

b = a.get_next() # get the initial value of b
while b:
    fn(b)
    b = a.get_next() # get the next value for b. If b is 'fasly', the loop will end.

答案 2 :(得分:2)

不确定为什么要这样,但你可以分配并检查是否存在于同一语句中:

import itertools as it
for b in (x.get_next() for x in it.repeat(a) if x.is_next()):
    fn(b)

答案 3 :(得分:0)

搜索生成器,迭代器和yield语句。

代码示例

class Container:
    def __init__(self,l):
        self.l = l
    def next(self):
        i = 0
        while (i < len(self.l)):
            yield self.l[i]
            i += 1

c = Container([1,2,3,4,5])


for item in c.next():
    print(item, end=" ") # 1 2 3 4 5