直接上代码

第一轮

# 避免一次性在内存创建很多数据
def func():
    yield 1
    yield 2
    yield 3 

obj = func()

v1 = obj.__next__()
print(v1)

# __next__ 会从上一次位置开始继续执行
#v2 = obj.__next__()
#print(v2)

# __next__ 会长上一次位置开始继续执行
#v3 = obj.__next__()
#print(v3)

结果如下

1

第二轮

# 避免一次性在内存创建很多数据
def func():
    yield 1
    yield 2
    yield 3 

obj = func()

v1 = obj.__next__()
print(v1)

# __next__ 会从上一次位置开始继续执行
v2 = obj.__next__()
print(v2)

# __next__ 会长上一次位置开始继续执行
#v3 = obj.__next__()
#print(v3)

结果如下

1
2

第三轮

# 避免一次性在内存创建很多数据
def func():
    yield 1
    yield 2
    yield 3 

obj = func()

v1 = obj.__next__()
print(v1)

# __next__ 会从上一次位置开始继续执行
v2 = obj.__next__()
print(v2)

# __next__ 会长上一次位置开始继续执行
v3 = obj.__next__()
print(v3)

结果如下

1
2
3

另外一种写法

def func():
    yield 1
    yield 2
    yield 3 

obj = func()

for item in obj:
    print(item)

结果如下

1
2
3

要用生成器函数,可以举个例子。比如要生成很多数字。如果用list,就会消耗很多内存,这是不可取的。

def getManyNum(limit):
    num = 0
    while num < limit:
        yield num 
        num += 1

nums = getManyNum(10000000000)

for item in nums:
    print(item)


给个赞呗~

04-11 23:26