在此代码中混淆Lambda函数

时间:2016-05-03 14:51:16

标签: python function lambda

这是我在网上找到的一段开源代码。我试图解决它但有一些功能,我在其中的Lambda函数遇到特别的麻烦,以及为什么我无法从中打印值。

下面是代码,并注释掉了我尝试过的所有代码行,但结束了[崩溃代码。我想知道他们为什么会崩溃代码。

有一个print语句可以工作,但只能在for循环中使用。在for循环之外它崩溃了。

fo = open('outp3.txt','w')
with open('C-small-practice.in','r') as fi:
    rr = lambda: fi.readline().strip()
    rrI = lambda: int(rr())
    rrM = lambda: map(int,rr().split())
    #print rr() ## This print statement doesn't work
    #print rrI() ## This print statement doesn't work
    #print rrM() ## This print statement doesn't work
    #T1= rr() ## this doesn't work/crashes the program
    #T2= rrI() ## this doesn't work/crashes the program
    #T3= rrM() ## this doesn't work/crashes the program
    #print T1 ## This print statement doesn't work
    #print T2 ## This print statement doesn't work
    #print T3 ## This print statement doesn't work
    for tc in xrange(rrI()):
        N = rrI()
        #M = rr() ## this doesn't work/crashes the program
        #O = rrM() ## this doesn't work/crashes the program
        print N #this works!
        #print M
        #print O
        A = [rr().split() for _ in xrange(N)]
        zetaans = solve(N,A)
        zeta = "Case #%i: "%(tc+1) + str(zetaans)
        fo.write(zeta+'\n')
fo.close()

以下是它使用的输入

3
3
HYDROCARBON COMBUSTION
QUAIL COMBUSTION
QUAIL BEHAVIOR
3
CODE JAM
SPACE JAM
PEARL JAM
2
INTERGALACTIC PLANETARY
PLANETARY INTERGALACTIC

1 个答案:

答案 0 :(得分:1)

rr()读取一行。

rrI()读取一行并将其转换为int。因此,for循环将在您输入之后运行3次。

每次调用N = rrI()时,都会读取下一个数字。然后,rr().split()被称为N次。因此,A是一个长度为N的列表,其中每个元素本身都是一个列表,对应于输入中的一行,并按空格分成单词。

您可以注意到输入文件格式必须与代码完全匹配,即在调用rrI()时,您希望看到int,而不是字符串。

添加添加print rr()print rrI()会导致代码崩溃,因为您还会读取添加行,因此不再遵循输入格式。