Python3基础-模块

一 、模块介绍

在Python中,一个.py文件就称之为一个模块。

文件名为XX.py模块名则是XX ,导入模块可以引用模块中已经写好的功能

使用模块的好处是:提高了代码的可维护性

模块一共三种:

  • python 标准库 eg  time、os
  • 第三方模块  
  • 应用程序自定义模块

二、模块使用

没有特别注释,就说明demoA、demoB 在相同的文件目录下

2.1 import 语句

#文件名:demoA.py 
def demoA_test():
    print("我是模块A的内容")
    demo_A='Hi,MY name is demoA'
    print(demo_A)

class Foo:
    def func(self):
        print('from the func')

a=1
if __name__ == '__main__':
    demoA_test()

在另外一个demoB.py文件引用demoA.py的功能

import demoA #引入模块

x=demoA.a  #引用模块foo中变量a的值 赋值给当前名称空间中的名字
print("x =====:",x)
demoA.demoA_test() #调用模块demoA的demoA_test函数
obj = demoA.Foo() #调用模块demoA的类Foo 来实例化,
obj.func()

执行demoB.py文件的结果如下

x =====: 1
我是模块A的内容
Hi,MY name is demoA
from the func

导入多个模块---一行导入,用逗号分隔开不同的模块

import  module1,module2,...moduleN

导入多个模块---多行导入

import  module1
import  module2
   ...
import  moduleN

2.2 from -import 语句

#文件名  demoA.py
a=1

def demoA_test():
    print("我是模块A的内容")
    demo_A='Hi,MY name is demoA'
    print(demo_A)
def demoA_glo(): global a a = 0 print("a====",a) class Foo: def func(self): print('from the func') if __name__ == '__main__': demoA_test()

在另外一个demoB.py文件引用demoA.py的功能

方法1:

from demoA import  a,demoA_test,demoA_glo,Foo  #将模块demoA中的a,demoA_test,demoA_glo导入当前名称空间

x=a   #直接使用模块demoA中的a赋值给x
print("x=====",a)
a=10
demoA_test()  #直接执行demoA的demoA_test函数
demoA_glo()    #直接执行demoA的demoA_glo函数  当前文件有重名的,修改的仍然是源文件中的a
obj=Foo()  #直接执行demoA的类Foo 来实例化
obj.func()

"""
执行结果
x===== 1
我是模块A的内容
Hi,MY name is demoA
a==== 0
from the func
"""

方法2:

from demoA import *  #将模块demoA中的所有名字都导入到当前执行文件的名称空间中,在当前位置可以直接使用这些名字

x=a   #直接使用模块demoA中的a赋值给x
print("x=====",a)
a=10
demoA_test()  #直接执行demoA的demoA_test函数
demoA_glo()    #当前文件有重名的,修改的仍然是源文件中的a
obj=Foo()  #直接执行demoA的类Foo 来实例化
obj.func()

"""
执行结果
x===== 1
我是模块A的内容
Hi,MY name is demoA
a==== 0
from the func

"""

方法2  可以在自己的文件中定义__all__变量来控制*代表的意思

#demoA.py
__all__ = ['x','demoA_test'] #该列表中所有的元素必须是字符串类型,每个元素对应demoA.py中的一个名字
a=1

def demoA_test():
    print("我是模块A的内容")
    demo_A='Hi,MY name is demoA'
    print(demo_A)
def demoA_glo():
    global  a
    a = 0
    print("a====",a)

class Foo:
    def func(self):
        print('from the func')
        
if __name__ == '__main__':
    demoA_test()

执行结果如下:

from demoA import *  #此时的*  只有a和demoA_test

x=a   #直接使用模块demoA中的a赋值给x
print("x=====",a)
a=10
demoA_test()  #直接执行demoA的demoA_test函数
#demoA_glo()    #不可用,报错NameError: name 'demoA_glo' is not defined
#obj=Foo()  #不可用,报错NameError: name 'Foo' is not defined
"""
执行结果
x===== 1
我是模块A的内容
Hi,MY name is demoA
"""

2.3 as语法

源文件

a=1

def demoA_test():
    print("我是模块A的内容")
    demo_A='Hi,MY name is demoA'
    print(demo_A)
def demoA_glo():
    global  a
    a = 0
    print("a====",a)

class Foo:
    def func(self):
        print('from the func')

if __name__ == '__main__':
    demoA_test()

import -as ;from - import as

import  demoA as deA

x= deA.a
print("x---",x)
"""
执行结果
x--- 1
"""
from demoA import  demoA_test as deA

deA()
"""
执行结果
我是模块A的内容
Hi,MY name is demoA
"""

 

2.4 不同目录的调用

1、同级目录下:

--pythonscript

   |--demoA.py

   |--demoB.py

在程序demoB.py导入demoA.py,是直接调用的

#import
import demoA.py

# from -import
from demoA import *

2、调用子目录下的模块:

--pythonscript

   |--test_module

        |---demoA.py

        |--__init__.py(空文件) python3.7.2 在pycharm是不需要创建__init__.py

   |--demoB.py

在程序demoB.py导入demoA.py; 需要在test_module目录下创建空文件__init__.py->python3.7.2 在pycharm是不需要创建__init__.py

#from-import
from demo_module.demoA import *
demoA_test()
"""
执行结果
我是模块A的内容
Hi,MY name is demoA
"""

#import
import  demo_module.demoA
demo_module.demoA.demoA_test()
"""
执行结果
我是模块A的内容
Hi,MY name is demoA
"""

3、调用上级目录下的模块:

--pythonscript

   |--test_module

        |---demoB.py

  |--lib

       |--demoC.py

       |--__init__.py[空文件] python3.7.2 在pycharm是不需要创建__init__.py

   |--demoA.py

demoB.py调用文件demoA.py和demoC.py  

import sys
sys.path.append('..')  
import  demoA
import  lib.demoC

#默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模
#sys.path.append('..')    新增上一级目录搜索
#sys.path.append()   也可以加自定义的搜索目录 

 

posted @ 2019-10-28 12:01  槑槑DE  阅读(136)  评论(0编辑  收藏  举报