今天Eiffel看到了第33章,任务是把一个while循环改成一个函数。

我在把while循环改成函数上很顺利,但是不知道怎么写python的主函数,在参数的调用上也出现了问题。

通过查资料,发现python的main函数可以用如下的方式来表示:

if __name__ == '__main__'

然后自然而然的想把main函数里声明的参数i,numbers,m传入loop()中。

最开始的想法:

def loop(i,numbers,m):
    while(i<m):
        print "at the top is %d" %i
        numbers.append(i)

        i = i+1
        print "Numbers now: ", numbers
        print "At the bottom i is %d" % i

    print "The numbers:"

    for num in numbers:
        print num


if __name__ == '__main__':
    i = 0
    numbers = []
    m = rawinput("input:")
    loop(i,numbers,m)

    print "thank you"

成功运行,但是运行结果是一个远大于输入的的数组,下图书raw_input为3的结果:

讲raw_input改为input之后,可以正常输出结果:

心得总结:

  1、main函数在python中的表示(如上述)。

  2、python中的参数传递方法,目前看来,与c++差别不大。

  3、input与raw_input:区别在于raw_input将所有输入的东西一视同仁(视为字符串),而input则会自动区分输入的类型。如上文输入3的时候,raw_input应该是将3看成了字符串,那么字符串的值可能就是运行结果中的6907+1=6908了。

  4、global参数:在编写的过程中,一直很疑惑一点:就是main函数中的i变量应该是默认为全局变量的,我并没有在loop函数里边声明i变量为global,为什么loop里边的i值持续改变,却没有报错“referenced before assignment”呢?后来想到,是因为我是用参数传递的方法传递的i变量,所以函数内外的i值始终是一致的。换言之,如果loop()没有引用参数i,那么其内部的i则必须定义为global i。

  5、其实python中main函数并不是必要的。