为什么打印和返回会给我不同的结果?

时间:2014-06-23 22:39:58

标签: python list printing return

我使用Python脚本为各种模数计算Pascal的三角形,然后吐出Lilypond可以读取的格式化字符串。这是一首音乐。

我可以使用以下方法完美打印三角形:

rows_and_mod = 2
rows = rows_and_mod ** 2

def lily_string(rows):
    for rownum in range (rows):
        newValue=1
        PrintingList = [newValue]
        for iteration in range (rownum):
            newValue = newValue * (rownum-iteration) * 1 / ( iteration + 1 )
            PrintingList.append(int(newValue % rows_and_mod))
    for n,i in enumerate(PrintingList):
        if i==0:
            PrintingList[n]='r8'
        elif i==1:
            PrintingList[n]='g8'
        elif i==2:
            PrintingList[n]="b16 b"
        elif i==3:
            PrintingList[n]="\\tuplet 3/2 { d'16 d' d' }"
        elif i==4:
            PrintingList[n]="f'32 f' f' f'"
    formatted_tri = " ".join(PrintingList)
    print formatted_tri

final_tri = lily_string(rows)

打印哪些:

G8
g8 g8
g8 r8 g8
g8 g8 g8 g8

但是当我用返回替换最后的打印时,它只返回列表的第一项。例如:

    formatted_tri = " ".join(PrintingList)
    return formatted_tri

final_tri = lily_string(rows)

print final_tri

仅打印一个g8。

我想我一定不知道如何使用或放置Return。

1 个答案:

答案 0 :(得分:1)

return立即结束该功能。当它只是return而没有参数时,这显然更加明显。一个函数调用只能执行一个return,因为一旦它执行,它就会消失。

>>> def f():
...     print 1
...     return
...
...     # Doesn't happen.
...     print 2
...
>>> f()
1

如果您想要从程序中发送输出(例如,Lilypond可以使用它),您需要print。如果要将数据发送到调用该函数的程序部分,则需要return。在这里,您需要print。如果要对Python程序中的字符串执行进一步处理,则需要return单个字符串或字符串列表。

最后,您已经混合了标签和空格以进行缩进。如果你继续这样做,你会遇到奇怪的错误,你的程序的某些部分在错误的时间,太多次或根本没有被执行,并且经过几个小时的挫折之后,你会发现Python正在阅读你的缩进与你阅读它的方式不同。避免这些问题;不要混合标签和空格。