模块

模块

什么是模块?

模块是一系列功能的结合体,模块本质上是一个个的.py文件

模块的三种来源

1.python内置的模块(python解释器的),比如sys/time/os/turtle

2.第三方的模块(别人写的),比如requests

3.自定义的模块(自己写的),比如自定义的.py文件

模块的四种表现形式

1.使用python编写的py文件

2.编译后的共享库DLL(动态链接)或者是C或者是C++

3.包下面带有init.py的一组py文件

4.python解释器下的py文件

为什么要使用模块?

模块可以帮我们更好地管理功能代码,比如:函数

还可以将项目拆分成一个个的功能,分别存放在不同的py文件中

如何创建 编写模块 并使用模块?

鼠标右键创建py文件

  • 在py文件编写python代码

  • 在一个文件中,通过import关键字导入模块
    import 模块名

    注意: import 模块时,模块不能加.py后缀

  • 在使用模块阶段,必须要注意,谁是执行文件,谁是被导入文件(被导入的模块)

  • 模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找

    #自定义模块,在py文件中编写代码
    x = 1
    def get():
        print(x)
    def change():
        global x
        x = 0
        print(x)
        
        
    #调用上面自已定义的模块
    import foo #导入模块foo
    a=foo.x #引用模块foo中变量x的值赋值给当前名称空间中的名字a
    foo.get() #调用模块foo的get函数
    foo.change() #调用模块foo中的change函数
    

模块在导入时发生的事情:

1、执行源文件代码

2、产生一个新的名称空间用于存放源文件执行过程中产生的名字

3、在当前执行文件所在的名称空间中得到一个名字,该名字指向新创建的模块名称空间,若要引用模块名称空间中的名字,需要加上该前缀

import语句
  • 给模块起别名 as
    import 模块 as 模块的别名

  • 模块的导入方式

    import 模块,在执行文件中直接import导入

    from 包/模块 import 模块/(函数名、变量名、类名)

    #使用import foo导入模块后,引用模块中的名字都需要加上foo.作为前缀,而使用from foo import x,get,change,Foo则可以在当前执行文件中直接引用模块foo中的名字
    
    from foo import x,get,change #将模块foo中的x和get导入到当前名称空间
    a=x #直接使用模块foo中的x赋值给a
    get() #直接执行foo中的get函数
    change() #即便是当前有重名的x,修改的仍然是源文件中的x
    
    #无需加前缀的好处是使得我们的代码更加简洁,坏处则是容易与当前名称空间中的名字冲突,如果当前名称空间存在相同的名字,则后定义的名字会覆盖之前定义的名字。
    
    from foo import * #把foo中所有的名字都导入到当前执行文件的名称空间中,在当前位置直接可以使用这些名字
    

加上foo.作为前缀就相当于指名道姓地说明要引用foo名称空间中的名字,所以肯定不会与当前执行文件所在名称空间中的名字相冲突,并且若当前执行文件的名称空间中存在x,执行foo.get()或foo.change()操作的都是源文件中的全局变量x。

PS:第一次导入模块已经将其加载到内存空间了,之后的重复导入会直接引用内存中已存在的模块,不会重复执行文件

#可以用import语句导入多个模块,即写多行import语句
import module1
import module2
    ...
import moduleN
#还可以在一行导入,用逗号分隔开不同的模块
import module1,module2,...,moduleN

model1.py
from model2 import name
name = 'jason'

model2.py
from model1 import name
name = 'tank'

解决循环导入问题:
1.需要查找的名字放在导入模块的上方
2.在函数内部导入,将模块变成函数名称空间中的名字

posted @ 2019-11-19 23:41  bing丶  阅读(145)  评论(0编辑  收藏  举报