Modules,Python Tutorial阅读笔记(3)
参考资料:
注:由于感觉自己的Python还没有学通透,在看项目的代码时还是有一些困难。所以想看一下Python官网的Tutorial自学一下,我在读的时候也是略过了自己已经会的地方,所以我写的东西都是自己学到的新东西。
规范:黑体x)表示自己学到的东西模块,是一个大概的区分。4.1,4.2等表示在Tutorial中的位置。
这一个tutorial的名字叫Modules,之前我转载过一篇文章辨析了module和package的关系。读者可以看这里:https://www.cnblogs.com/chester-cs/articles/13984840.html。所以这篇文章只讲学到的新东西。
1) 6.1.3 “Compiled” Python files
为了加速加载模块,Python会在模块所在的目录下缓存complied的module。比如你有一个Hello.py模块,import它之后,当前目录下就会出现一个__pycache__/文件夹,里面会出现一个类似Hello.cpython-38.pyc的文件。
注意了,这个pyc文件只能加速加载module,并不能加速运行。
2)6.2. Python在哪里寻找模块?
>>> import sys >>> sys.path ['', 'D:\\miniconda\\python38.zip', 'D:\\miniconda\\DLLs', 'D:\\miniconda\\lib', 'D:\\miniconda', 'D:\\miniconda\\lib\\site-packages', 'D:\\miniconda\\lib\\site-packages\\win32', 'D:\\miniconda\\lib\\site-packages\\win32\\lib', 'D:\\miniconda\\lib\\site-packages\\Pythonwin']
我们可以使用sys.path来看。这个sys.path其实就是继承了环境变量PYTHONPATH中的值。
3)假设我们有下面这样的文件结构:
sound/ Top-level package __init__.py Initialize the sound package formats/ Subpackage for file format conversions __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ Subpackage for sound effects __init__.py echo.py surround.py reverse.py ... filters/ Subpackage for filters __init__.py equalizer.py vocoder.py karaoke.py ...
通过我们已经学到的知识,我们已经知道Python会将哪些看成包,哪些看成module。但是在上面的例子里,假如我们import sound之后,使用sound.filters还是会报错,它会说sound下面没有这个模块,这是为什么呢?
答案就在__init.py__文件里。
我们平时import numpy as np,np.array()用的很舒服,但是其实都是软件的设计者在import numpy的时候设计的啦,比如numpy的__init__.py中会有from . import random,如果没有的话是不会加入到Python的symbol space中的。