Python:产生还是返回

时间:2018-12-13 03:31:26

标签: python function return yield

所以我写了这段代码:

def character(f):
    #Reads one character(byte by byte) from the given text file
    c = f.read(1)
    while c:
        yield c
        c = f.read(1)

我希望在下面的函数中解析此值。当我运行此代码时,什么都不会发生。没有错误,但也没有显示输出。 dbc_cabin_read确实达到了计数器值30,但未打印任何内容。我认为程序不会进入循环。

def dbc_cabin_read(f):
    try:
        f.seek(0,0)
        ctr = 0
        for line in f.readlines():
            ctr += 1
            if ctr == 30:                 
                for c in character(f):
                    print(c, sep="", end="")
                break

    finally: 
        f.close()

character(f)中,如果我使用return而不是yield,则会发生类型错误:

  

发生异常:TypeError'NoneType'对象不可迭代

1 个答案:

答案 0 :(得分:3)

f.readlines()读取整个文件。如果您只想阅读前30行,则可以循环调用f.readline()。然后,您可以使用生成器继续从该位置读取文件。

for _ in range(30):
    f.readline()
for c in character(f):
    print(c, sep="", end="")