Python3.4里面__name和__main__的作用

在python的代码里我们经常会看到这样两个片段,__name__和__main__那么代表什么意思呢?

在这之前,我们先来了解下python文件的调用方法,主要有两种
1,直接在cmd或shell终端调用xxx.py文件
2,导入别的python文件里做为一个工具类调用

懂了上面这两个方式后,我们在理解这两个属性的作用就好理解了,其实__name__是每个模块或类里面的内置属性,__main__代表直接运行这个py文件时的标记,如果不是__main__那就说明,这个py文件,是导入到别的python代码里,昨晚工具类使用的,下面看散仙写如下的例子:
这个是测试的python文件b.py代码

def say():
    print("say")

def b():
    print("B")

def c():
    print("C")


def d():
    print("D")



if __name__=="__main__":
    print("我是直接运行的")
    b();
else:
    print("不是直接运行!")


if __name__=="b":
    print("导入模块调用了")
else:
    print("其他模块")



在cmd下直接运行,打印结果如下:

Python3.4里面__name和__main__的作用


在别的python代码里调用打印如下:
D:\python\python.exe D:/pythonide/pythonprojectworkspace/python/main方法测试/p.py
不是直接运行!
其他模块

Process finished with exit code 0



下面看下如何在python的里面,测试这个区别:


class  Person:
    def run(self):
        print("我在奔跑!")
    def swimming(self):
        print("我在游泳")
    if __name__=="__main__":
        print("Person里条用")
    else:
        print("oh no person!")


class Model:
    def say(self):
        print("我是一个model")
    def p(self):
        print("Model")
    if __name__=="__main__":
        print("Model里条用")
    else:
        print("oh no model!")





if __name__ =="__main__":
    p=Person();
    p.run();
else:
    x=Model();
    x.say();


打印的效果如下:
D:\python\python.exe D:/pythonide/pythonprojectworkspace/python/main方法测试/p.py
不是直接运行!
其他模块
oh no person!
oh no model!
我是一个model

Process finished with exit code 0



通过上面这个例子,我们能够看出来,在一个py文件里的多个类也是可以定义自己的__name__和__main__如果我们没有明确指定是那个类的方法,那么执行这个文件导入模块时,就会把这个py下所有定义的类__name和__main__都执行一遍。











你可能感兴趣的:(__name__,python3.4,__main__)