关于Python的import机制原理
  很多⼈⽤过python,不假思索地在脚本前⾯加上import module_name,但是关于import的原理和机制,恐怕没有多少⼈真正的理解。本⽂整理了Python的import机制,⼀⽅⾯⾃⼰总结学习,另⼀⽅⾯助于⼤家交流。
  ⾸先解释⼀下基本概念:
  模块(module):其实就是⼀个py⽂件,⾥⾯定义了各种变量,函数,类。
  模块除了内建模块(可以⽤过dir(__builtins__)查看有哪些内建函数),就是⾮内建模块,这⼀部分模块就需要⽤import 导⼊。⾮内建模块经常需要按照第三⽅库,⼀般第三⽅模块在"安装路径\Python\Python35\Lib\site-packages"⽬录下。
  包(package):⼀个有层次结构的⽂件⽬录,⾥⾯包含了模块和⼀些⼦包,要求包中必须带有⼀个__init__.py⽂件。
  导⼊⽅法:
  import module_name
  from module_name import module_element
  不难理解,该过程把module_name.py⽂件的全部内容加载到内存,把变量类型为’module‘赋值给当前模块的同名变量。
  在导⼊模块时。模块所在⽂件夹将⾃动⽣成⼀个对应的__pycache__\module_name.cpython-36.pyc⽂件
  怎么加载?——加载⽅式和⽤法
  ⽅式:
  1.import packagepython怎么读取py文件
  读这个包的__init__.py,也就是说导⼊包的本质是执⾏包下⾯的__init__.py⽂件,执⾏结束后会包名的⽬录下⽣成⼀个"__pycache__ / __init__.cpython-36.pyc" ⽂件。
  2.import module
  读整个模块的内容
  3.import package1.dule4
  package读取__init__.py,module读取整个模块内容,按顺序读
  注意:因为package是读取__init__.py,所以调⽤的时候必须在__init__.py有引⽤的东西才能调⽤,否则会报错。
  从哪⾥加载?
  对于python来说,所有被加载到内存的模块都是放在dules⾥⾯,所以执⾏import时会⾸先去该列表中查询是否已添加。如果已经在dules中,那就简单了,只需要将该module的name添加到我们正在调⽤该module的本地空间中。如果还没有放在dules中,就需要在sys.path所有路径的⽬录中去按顺序查该模块的⽂件,这些⽂件⼀般后缀为".py"、".pyo"、".pyc"、".pyd"、".dll",到这些模块后就可以将这些模块添加到dules中,再将module name导⼊到本地。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。