当你导入一个模块,Python解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
由sys模块的sys.path方法来规定
因为sys.path返回的数据类型是列表
1、列表可以修改、我们导入的范围也可以通过修改sys.path这个列表获得暂时的修改。例如通过 sys.path.append()添加目录,导入额外目录的模块。
2、列表是有序的,当搜索的过程当中,在第一个路径下搜索到了,就停止搜索。而且sys.path第一个路 径是脚本的当前路径,所以禁止大家讲自己的脚本命名成模块的名称。
因此需要注意的是:自己模块命名的时候不能和系统的模块名称相同。
pyc临时文件
为了提高加载模块的速度,python解释器会在__pycache__目录中下缓存每个模块编译后的版本,之后,再次被导入时,实际上导入的是这个.pyc的临时文件。
把模块当做脚本运行
我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
name 的值 等于’main’
当做模块导入:
__name__的值等于模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if name == ‘main’:
创建model03.py文件,其程序是:
name='haitao'
print(__name__) #__name__是内置属性 打印出来是 __main__
#__main__
if __name__ == '__main__':
print('xxx') # xxx
模块当脚本运行时,name = ‘main’
模块被导入时,name 就是模块变量名称,在被调用时,其
测试代码将不会执行。
import model03
print(model03.__name__)
运行结果:
model03
model03
内置属性的两个作用:
#1、根据__name__的值可以写测试代码:
# 根据__name__的值可以写测试代码
# if __name__ == "__main__":
if __name__ == '__main__':
print('xxx')
# 2、做测试入口
def func():
print('程序开始了')
def func1():
print('程序结束了')
if __name__ == '__main__':
func()
func1()
运行结果:
程序开始了
程序结束了