python包与模块,python可以识别的模块导入方式

1.基础概念理解

  首先,python里有包和模块,对应到我们熟知的windows系统里来,就是文件夹与py文件,也即python的包是一个文件夹,但这个文件夹下必须要有一个__init__.py的文件,而python的模块对应的是一个py文件,这个也很好理解。

2.区分python2、3

  之前大都使用python2版本来开发,以后慢慢的python2就不维护了,我们都会迁移到3,python2和3在包的导入上也是有区别的,建议初学者最好以python3的标准来。

  为了方便解释,我们画一个项目的结构图

      project

  |----__init__.py

  |----main.py  主入口文件

  |----util.py     公共函数,与入口函数同级别目录

  |----A  文件夹A,与入口函数同级别目录,下含两个py文件

    |----__init__.py

    |----parse.py

    |----stat.py

    一般python可识别可接受的模块导入有这么几种:

  • 在同一个目录下。如main.py导入util.py里的f1函数,那么我们这么写from .util import f1,这个是python3的写法,python2中是这么写的from util import f1,不需要.,不建议大家使用python2的语法,但要了解知道它的写法
  • 在相同目录的文件夹下。如main.py从包A从导入parse模块中的f2函数,那么我们这么写from A.parse import f2
  • 在上一层目录下。如parse.py要从util.py导入f1,那么我们这么写from ..util import f1
  • 最后一个就是python的path路径了。

 需要注意的是,如果一个包下的模块要被别的文件导入,这个包也即文件夹下必须要有__init__.py文件

  

3.一些小技巧

  1.dir

    我们在面对一个新的python模块的时候,不知道怎么用它的方法,可以通过dir(模块名),查看所有的方法

  2.你应该知道的__name__内置变量

    在python里,每一文件里的变量,无论是什么类型的,要么是自己定义的,要么是从别的模块导入的,它们都有来源,但有些是例外,那就是内置变量,他们不需要我们定义,准确的说,这个是被python内部定义过的变量,不在需要我们显示的定义了。

    我们这里提一个重要的内置变量__name__,大家肯定经常用,我们在运行主函数的时候,一定会写if __name__ == '__main__': 然后做一些操作,那么为什么这么写 呢?首先,__name__是一个python的内置变量,每一个模块,也就是每一个py文件都会有自己的这个内置变量,它代表的值是相对路径,谁和谁的相对路径呢?q.py文件导入了w.py(模块)的某个函数的时候,w模块的__name__值就是w.py文件相对于q.py文件的路径,而直接被python执行的q.py文件的__name__值是多少呢,就是'__main__',这也是为什么用if __name__ == '__main__':这段代码,而在q.py文件被别的包调用时候,它的__name__也就同样是一个相对路径了。

猜你喜欢

转载自www.cnblogs.com/wsjgdxx/p/12006271.html
今日推荐