java和python玩家对import关键字一点都不陌生,本文以python为例,试着理解一下。
可以猜到,在import模块时,python会从环境变量中搜索需要加载的模块,这个列表就存放在sys.path变量中,可以进行修改。想要引入时,首先要将路径放到环境变量中。
对环境变量临时修改,将<code>/home/admin/git</code>添加进来,示例如下:
类似windows系统变量,在查询时,也是按照列表的顺序进行遍历
这个很容易理解,文件查询而已,有的是.py文件,有的是带目录package的。
测试代码和结果如下:
将这个函数补充完善一下, 其中<code>import_file_to_module</code>是将源码弄成python模块对象并返回,还有,要将模块的各类属性给塞进去。以<code>json</code>为例,他的属性列表(两个'_'开头结尾的)如下:
具体加载器实现如下:
用的最多的东西反而最容易被忽视,比如c语言printf(),c++的cout,ruby的require等等。
拿来玩一玩,跟挖宝一样,蛮有意思的~~
<a href="https://ruby-china.org/topics/4897">pep 302是什么?</a>
<a href="http://programmers.stackexchange.com/questions/154247/experience-of-pythons-pep-302-new-import-hooks">experience of python's “pep-302 new import hooks”</a>