python 模块

系统 1383 0

 

要先导入模块,才能调用用模块中定义的函数(才会有该模块的代码提示)。

            
              import
            
              模块   
            
              #
            
            
              导入一个模块
            
            
              import
            
              模块1,模块2,....    
            
              #
            
            
              同时导入多个模块
            
            
              from
            
              模块  
            
              import
            
              部分   
            
              #
            
            
              导入一部分
            
            
              from
            
             模块  
            
              import
            
              部分1,部分2,部分3....     
            
              #
            
            
              导入一个模块的多个部分
            
            
              from
            
              模块  
            
              import
            
              *    
            
              #
            
            
              导入整个模块
            
          

以上的  模块  均可换为  模块.子模块  ,表示只导入子模块|从子模块中导入。

 

导入之后就可以通过    模块名.方法名()    调用模块中的函数了。

 

不管导入一个相同模块多少次,只会在第一次时导入。

比如写十行  import math  ,只有第一个  import math  会导入math模块,避免了重复导入模块。

 

 

 

dir()函数

            
              import
            
            
               math

            
            
              print
            
            
              (dir(math))  


            
            
              """
            
            
              
dir(模块名)    #列出该模块所有的成员变量、方法。需要先导入对应的模块。以字符串列表的形式返回。dir()是python的内置函数。

            
            
              """
            
          

 

 

 

一个python文件(.py)就是一个python模块,一个模块中可以定义多个类,定义多个方法,可以有可执行代码。

新建一个python文件:module1.py

            
              print
            
            (
            
              "
            
            
              module start
            
            
              "
            
            )  
            
              #
            
            
              可执行代码
            
            
              class
            
             Test:  
            
              #
            
            
              定义类
            
            
              def
            
            
               out(self):
        
            
            
              print
            
            (
            
              "
            
            
              test class
            
            
              "
            
            
              )


            
            
              print
            
            (
            
              "
            
            
              module1 running
            
            
              "
            
            )  
            
              #
            
            
              可执行代码
            
            
              def
            
             module1_test():  
            
              #
            
            
              定义方法
            
            
              print
            
            (
            
              "
            
            
              test function
            
            
              "
            
            
              )


            
            
              print
            
            (
            
              "
            
            
              module1 over
            
            
              "
            
            )  
            
              #
            
            
              可执行代码
            
          

一个模块有2个默认属性:__main__,__name__

 

__main__

__main__即这个模块中所有的可执行代码。

导入一个模块时,会自动执行这个模块的__main__部分:

新建python文件module2.py

            
              import
            
             module1
          

执行module2.py,结果如下:

            
              module start
module1 running
module1 over
            
          

导入一个模块时,会自动执行这个模块的__main__部分(所有可执行代码)。

所以我们常常在__main__中做一些这个模块的初始化操作,习惯把这些代码放在文件开头。

 

 

__name__

如果是在模块的类中、函数中,__name__表示当前执行的python文件的文件名(不带后缀.py)。

如果是在模块的可执行代码(__main__)中,__name__表示当前的模块(.py文件)是主动执行的,还是被调用的。如果__name__的值是"__main__则表示当前模块(.py文件)是主动执行的。

 

module1.py如下:

            
              if
            
            
              __name__
            
            ==
            
              "
            
            
              __main__
            
            
              "
            
            
              :
    
            
            
              print
            
            (
            
              "
            
            
              主动调用
            
            
              "
            
            
              )

            
            
              else
            
            
              :
    
            
            
              print
            
            (
            
              "
            
            
              被动调用
            
            
              "
            
            
              )


            
            
              class
            
             Test:  
            
              #
            
            
              定义类
            
            
              def
            
            
               out(self):
        
            
            
              print
            
            (
            
              "
            
            
              test class
            
            
              "
            
            
              )


            
            
              def
            
             module1_test():  
            
              #
            
            
              定义方法
            
            
              print
            
            (
            
              __name__
            
            )  
            
              #
            
            
              在模块的类、方法中使用
            
            
              print
            
            (
            
              "
            
            
              test function
            
            
              "
            
            )
          

 

module2.py如下:

            
              import
            
            
               module1
module1.module1_test()
            
          

 

执行module1.py:

            主动调用
          

 

执行module2.py:

            
              被动调用 
module1
test function
            
          

 

有时候我们需要在主动执行时做一种操作,在被调用时做不同的操作,就可以这样来实现:

            
              if
            
            
              __name__
            
            ==
            
              "
            
            
              __main__
            
            
              "
            
            
              :
    
            
            
              #
            
            
              主动调用时做的操作
            
            
              else
            
            
              :
    
            
            
              #
            
            
              被动调用时做的操作
            
          

 

 

 

 

包相当于一个命名空间,各个包中的标识符是独立的,互不干扰。

一个包中可以有多个模块(.py文件),也可以有多个子包。

 

一个包(包括子包),都要有__init__.py文件,这是这个包的索引文件(目录文件),相当于书的索引、目录,标识这本书(这个模块)有哪些章节(python文件|模块)。

__init__.py文件有一个属性__all__,即这个包的索引、目录,我们  import  包  或者  from  包  import *  时(包可以看做一个大模块),python解释器会找到这个包的__init__.py中的__all__属性,根据其属性值导入这个包中的模块。

 

比如包school中有3个py文件(模块):student.py、teacher.py、leader.py。

__init__.py文件:

            
              __all__
            
            =[
            
              "
            
            
              student
            
            
              "
            
            ,
            
              "
            
            
              teacher
            
            
              "
            
            ]   
            
              #
            
            
              字符串列表,py文件名(不带后缀)
            
          

我们  import school  或  from school import *  导入整个包时,只会导入student、teacher这2个py文件,不会全部导入。

 

一般__init__.py文件是空的,这时默认__all__的值是包下所有py文件(除去__init__.py)的字符串列表,所以会全部导入包下的py文件(模块)。

 

习惯把包中的入口文件(我们要执行的py文件,程序入口,相当于c/c++、java中的main()函数),命名为__main__.py

 

 

 

import的具体用法

1、不使用包

  • 导入整个模块(py文件):  import py文件名   或  from py文件名 import *  
  • 导入py文件中的某个类:  from py文件名 import 类名  

调用函数:  py文件名.函数名(参数表)  

 

 

2、使用包,不使用子模块

  • 导入整个模块(py文件):  import 包名.py文件名  或  from 包名.py文件名 import * 
  • 导入py文件中的某个类:  from 包名.py文件名 import 类名 

调用函数:  包名.py文件名.函数名(参数表)  

使用子包时,以  包名.子包  作为包名即可。

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论