模块===包

Posted lynysy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块===包相关的知识,希望对你有一定的参考价值。

模块

  模块的分类   :  

    内置模块  :   安装python解释器时跟着装的

    第三方模块/扩展模块   :没在安装python解释器的时候装的功能

    自定义模块  :  自己写的模块文件

  什么是  模块 :

    有的功能开发者自己无法完成,这样的话需要借助  已经实现的函数或类  来完成这些功能;

    你实现不了的功能都由  别人替你实现了;

      别人写好的一组功能 : 包括   文件夹 /  py文件  / c语言 编译好的编译文件

        这样可以    分类管理方法       节省内存      提供更多的功能       

  模块名:

    模块文件名   和变量的名的命名规则  一样      一般情况下   小写字母开头

  如何使用模块 ?

    import   模块名         #   导入模块  

    模块名 . 方法名()       #   调用模块中的方法名

    模块名 .  变量名       #  得到  模块中的变量 的值

  import    模块名    这一步做了什么:?

    1.   首先   找到这个模块

    2.   创建一个属于  这个模块的 一个内存空间       

        将里边的  变量或方法存到空间中     若  模块中有两个  同名的变量   则会将第一个变量覆盖 

    3.   执行  这个模块中的内容

    4.   将这个模块   所在的命名空间   建立一个   和  模块名  之间的   引用关系

  在模块中   调用方法是   首先找的  也是  模块中的变量  

  模块的重命名:    改的  是 主要文件中  引用模块时  引用的名字      

  导入多个模块:    用   ,  隔开

    import  模块1 ,  模块2  

   但是在  PEP8规范中   ,   不允许  一行导入  多个模块  

      所有的模块   都应  尽量放在这个文件夹开头   以便  使用文件  及使用功能  的人  清楚  用了什么模块    

  模块的导入顺序:

    内置模块    = =  ==      第三方模块   = = ====     自定义模块

 

自己可以创建一个my_module.py文件,   里边添加  代码   将其当成模块导入执行

     主要文件                               my_moudle模块文件     

    import  my_module  #执行===>额                   print(‘额‘)

    my_module.login()#调用模块中的login()===>登录,alex            def  login():

                                          print(‘登录‘,name)

                                        name=‘‘ alex ‘‘

模块重命名:  

    import  module   as   n

      那么  调用模块中函数或者方法   

        n . login()     或    print(‘ n.name ‘)

 技术分享图片

from   模块名      import    方法名或变量名

  有时候   会有红色的线     不是  python解释器  发现的错误   而是  pycharm根据它的一些判断   得出的结论

  from  my_module   import  login

from  ...  import    ... 的时候发生了什么?

  仍然相当于   执行了整个 .py 文件

在  from   import  的时候  命名空间的变换   : 

  1.  直接  login()  就可以调用方法

  2.   导入了什么 ,  就能使用什么  , 

    不导入的变量  ,   不能用    ,  但是不导入   并不意味着 不存  

        而是 没有  建立文件       到           模块中其他的名字引用   

  3.   当  模块中导入的  方法  或者  变量  和本文件重名时  

      那么  这个名字代表  最后一次  对他赋值的那个方法或变量

  4.   在本文件中对 全局变量的修改是  完全不会   影响到  模块中的变量引用的

重命名:

  from  my_module  import  login  as  m 

    那么  以后引用就会变成   m()    模块中的名字是不变的   变得是引用的时候用到名字

导入多个:

  from  my_module  import    login , name

  login()===>    模块中的login

  print(name) ===>   指向模块中的   name

  name  =‘ 太亮 ‘    ====>   指向 新的 name

  login()  ===>  指向  模块中的 login                

导入多个模块之后重命名

  from  my_module  import  login  as l  , name  as  n

  变得也是引用中的 名字  ,  不是模块中的名字            

from   模块名  import  *

  from  my_module  import  *

  login()

  name     两个都可以  引用  

__all__可以控制导入的内容   _ _all__中必须是  [ ‘ 变量名‘  ]

  若模块中  有个 __all__[ ‘ login ‘ ]

    这样的话name  就不能用了

    若想用就重新导入一次  

    from  my_module   import  name

              

技术分享图片

 login的指向  :     

   若在自己空间添加一个  login函数  则会开一个  空间  

    里边装的是login会指向自己定义函数的空间,  

      原来的指针会断  当再次导入  一次模块的时候   那个指针就会断开  指向模块的  login空间

 

from  my_module   import  login            my_module                        

def  login():                     def  login():

print( ‘ in  my logion ‘ )                 print( ‘ 我 ‘ )

login() ====>     in  my  login      #    执行的是    自己文件中的   函数

 

 

 def     login():

  print( ‘ in my login ‘ )

from  my_module   import  login

login()    ====>   我     #   执行的是模块中的   函数

 

 

1.  from  my_module   import  login     执行这句话时 干了什么?

  1. 先找到  my_module  模块

  2.  开辟一块属于这个模块的命名空间

  3.  执行这个模块

2.  知道了  要import 的是login这个名字   那么就会 

    在本文件中创建一个变量  login  

        这个login   指向   模块命名空间中的     login函数

 技术分享图片

  若一个模块中有两个  name 开辟空间的时候 执行到name 的时候先指向的是第一个名字 ,   

     当再执行到name=  -***的时候   那个指针会断开原来的   指向另外一个名字

 

模块的其他相关知识

  1. 把模块当成脚本运行:  import  my_module 

    

 

以上是关于模块===包的主要内容,如果未能解决你的问题,请参考以下文章

包logging模块hashlib模块openpyxl模块深浅拷贝

python库、包、模块概念辨析

谁有python 模块包 百度云发我一下,非常感谢

包,logging模块,hashlib模块,openpyxl模块,深拷贝,浅拷贝

包/logging模块/hashlib模块/openpyxl模块/深浅拷贝

Python基础(二十六):模块和包简单介绍