python执行顺序

本来是想看看各类变量和成员变量相互关系,结果下面几行代码让对执行顺序产生了一点疑问

#!/usr/bin/env python
# coding = utf-8

class myClass:
    a = 1
    print 'class:   ' + str(id(a))

    def __init__(self):
        print 'init:    ' + str(id(a))

    def foo(self, a):
        print 'foo:     ' + str(id(a))

if __name__ == '__main__':
    a = 2
    print 'main:    ' + str(id(a))
    lihui = myClass()
    lihui.foo(a)

有兴趣可以敲一敲,看看class和main谁先打印~!

然后可以继续看看下面交换下顺序的结果

#!/usr/bin/env python
# coding = utf-8

if __name__ == '__main__':
    a = 2
    print 'main:    ' + str(id(a))

class myClass:
    a = 1
    print 'class:   ' + str(id(a))

    def __init__(self):
        print 'init:    ' + str(id(a))

    def foo(self, a):
        print 'foo:     ' + str(id(a))

lihui = myClass()
lihui.foo(a)

对比两者的结果,的确不能以C里的main以及调用顺序来想象脚本语言的任性,因为它有自己的文件结构,有些代码都是按照缩进来区分载入执行顺序,这里就算把if __name__ == ‘__main__’:这行去掉,根本不影响结果

发表回复