1. 在Python中,凡是以两个下划线开头,两个下划线结尾的变量叫做“魔法变量”。瓦特?魔法变量?对,你没有听错,就是魔法变量。所谓魔法变量就是Python对象内置天生就有的属性变量,你使用这些变量前不需要自己去定义,直接用就是。当然,既然是天生就有的,你也别去修改它,正常使用就好。
2. Python中每个py文件都叫一个模块。系统里面我们经常导入的模块,比如什么os啊,math啊,这些它们的本质都是一个个的py文件。我们自己写的每个py文件也都是一个个的模块,咱们可以把它看成是一个自定义模块。模块既然就是Python文件,那么它就有两种运行方式:一种是直接运行,另外一种是导入别的模块中再运行。
3.__name__这个魔术变量存在于Python的每个模块对象中,也就是说,按照我们上面的说法,每个py文件都有一个__name__属性。
创建项目 自动产生main.py, 该文件中写一句代码
打印结果
在建两个文件,分别是demo.py, study.py ,两个文件中分别只写一句代码:
在main.py中import demo ,import study
运行main.py,输出结果为:
说明两点:首先,当模块A被导入到模块B中时,一旦运行模块B,模块A中的语句会自动被执行一遍,以便加载模块A中的所有函数定义啊、类定义等语句到内存中等待被使用。所以,正是基于这个行为,运行main.py这个文件时,其实就相当于自动运行了一次demo.py和study.py。第二点,当模块是以“被导入”的方式运行时,它的__name__属性会自动变成该模块的名字,这就是为什么运行main.py打印出来的是“demo”和“study”而不是“__main__”的原因。
定义一个模块时会写if __name__ == "__main__": 这个语句了,这个if语句的条件只有当这个模块被直接运行时才会满足,当这个模块被导入别的模块时是不会被满足的。所以,凡是想让某些代码只在直接执行当前模块时运行,就把这些代码放到这个if语句下面即可,这就是这个语句存在的意义。