关于import和from xx import xx

一、关于导入模块

1在导入模块的一瞬间,解释其会先通过sys.modules来判断该模块是否已经导入了,True 则不再重复导入,False则会做三件事

  1为导入的模块创立心的名称空间

  2在心创建的名称空间中运行该代码中的代码

  3创建模块的名字,并使用该名称空间作为该模块的当前模块中引用的名字

2关于 " __name__"=="__main__":

  当我们把一个模块作为程序运行的入口时,此时该模块的__name__是"__main__;如果我们把模块导入时,此时模块内部的__name__事就该模块自身的名字.

    注意:在py中直接输入main可以出现神奇的效果!

 3我们还可以对导入的模块进行重新命名: 

 4 正确的导入模块的顺序:

           1. 所有的模块导入都要写在最上面. 这是最基本的

           2. 先引入内置模块           

   3. 再引入扩展模块           

   4. 最后引入你自己定义的模块

 二、关于from xx import xx:

跟import的区别就是可以部分导入,应用在模块内容过多的时候,我们可以选择性的导入要使用的内容:

关于from的注意点:

  1自己模块的变量名不要跟导入模块的变量名想冲突,不然系统会覆盖掉导入的变量名

  2 自己创建的py文件名字也不要和系统内置的模块重名,同理

       3 from xxx import xxx这种形式, import后⾯不可以出现"点" 也就是说from a.b import c是ok的. 但是 from a import b.c 是错误的

 

 三、一些补充

 有种特殊的写法:from xx import *    在被导入的这个模块中如果没有写出__all__则默认所有内容都导入;

                            否则,则导入__all__列表中列出来的所有名字.

 

 四、包

 什么是包:  包的本质是文件夹,py里创建的每个文件夹都可以被称之为包,创建包不是为了运行,而是被导入使用,其作用就是将模块文件组织起来,一次来提高程序的结构性和可维护性.py2规定包里面必须存在__init__.py文件,py3沿用了规定,但会在创建文件夹时,自动帮你创建__init__文件

 如何创建包:  只要是一个文件夹,有__init__.py 就可以.

1 关于__init__.py文件

不论使用哪种方式导入一个包,只要是第一次导入包\包的任何其他部分,都会先执行__init__py文件,这个文件可以是空,也可以存放一些初始化的代码

注意点:可以在此文件中把包中所有模块都调用进去,但要注意,路径要写绝对路径,否则其他外部模块调用包的时候会报错,写入之后,运行文件,只需调入包名字就可以拥有包中的所有模块了(不常用,因为有时只是想导入包里面的部分模块,这样写会占很大内存.)

包的注意事项:
1. 关于包相关的导入语句也分为import和from xxx import xxx两种, 但⽆论使⽤哪种,
无论在什么位置, 在导入时都必须遵循⼀个原则: 凡是在导入时d带点的. 点左边都必须是⼀
个包. 否则报错. 可以带⼀连串的点. 比如a.b.c

2.如果用from 绝对路径导入包,需要注意你的根目录下能否找到目标包,如果找不到,需要一层层的写

 

 

五、包中的绝对导入和相对导入(用于启动的文件一定要写在包的外部)

1绝对导入:是以根目录作为起始

2相对导入:用 .或者 ..作为起始  (此方法不是给自己模块用的,是给用于启动的文件用的)

 注意点1: 此方法不是给自己模块用的,是给用于启动的文件用的,原因是py中不允许你运行的程序导包的时候超过当前包的范围(相对导入),如果使用绝对导入,则没这个问题; 

 注意点2:导入包的过程中出错,先看print(sys.path.__str__())或者输入指令:print(sys.path)(sys是关于pycharm操作系统的模块,path是路径,合起来,意为查看路径) ,确认下是否真的能获取到包的信息

 注意点3:  ./是在当前目录;../是返回上级目录下 #可以在cmd窗口进行验证

posted @ 2019-01-06 09:08  Tank-Li  阅读(3849)  评论(0编辑  收藏  举报