zoukankan      html  css  js  c++  java
  • Python学习(十一) —— 模块和包

    一、模块

      一个模块就是一个包含了python定义和声名的文件,文件名就是模块名加上.py后缀。

      import加载的模块分为四个通用类别:

        1.使用python编写的代码(.py文件)

        2.已被编译为共享库或DLL的C或C++扩展

        3.包好一组模块的包

        4.使用C编写并链接到python解释器的内置模块

      为何要使用模块:将一些复杂的需要重复使用的功能进行归类,分别放到同一个py文件中,需要调用的时候直接导入,提高代码的复用性。

    二、导入模块

      先看内存里有没有这个模块,有则不导入,没有则导入,因此重复导入模块只会导入一次。

      每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,因此在自己编写模块时,不用但是会发生变量冲突

      import 模块名

      import 模块名 as 变量名:给模块重命名,重命名之后之前的名字就失效了,新名字可以直接使用

        适用于:模块名太长;模块名和文件的变量重名

      导入多个模块:import 模块名1,模块名2,模块名3...

      导入模块的顺序:先导入内置的模块,再导入扩展模块,最后导入自定义的模块

      from 模块名 import 方法

      from 模块名 import *,默认把模块里所有的变量导入,如果定义了__all__,则只会导入__all__里面的变量,__all__是一个列表,里面存放变量名的字符串形式

      from 模块名 import 方法1 as d,方法2 as p

      from 模块名 import (方法1,方法2,方法3)

      from import的方法会直接将导入的内容放在全局,如果在自己的文件有重名,那么会发生覆盖

    pi = 3.14
    from math import pi
    print(pi)  #3.141592653589793
    
    from math import pi
    pi = 3.14
    print(pi)  #3.14

      一旦导入了模块,如果修改模块的内容,修改的内容不会生效,如果想要使修改的内容生效,则要重启程序,或者导入importlib模块并使用reload()方法

    import time,importlib  
    import custom  #导入自定义模块
    custom.drive()  #调用自定义模块的drive方法
    time.sleep(10)  #手动修改drive方法
    importlib.reload()  #调用importlib的reload方法
    custom.drive()   #重新调用drive方法

       把模块当作脚本执行

      在需要被导入的模块中添加一行代码:if __name__ == '__main__':,当导入这个模块的时候,这行代码后面的内容就不会执行,因为导入模块后,被导入模块的__name__发生了变化,变成了模块名  

    name = 'abc'
    def func():
        print('Hello World!')
    
    if __name__ == '__main__':  #当这个文件被当作模块导入时,if里面的语句不会被执行,可以放测试的代码
        print(name)
        func()
  • 相关阅读:
    文件操作一写操作
    文件操作一读操作
    python基础初识
    while循环和格式化输出
    python基础数据类型一(整数类型和布尔值)
    CentOS 6下安装nodejs 0.9.0(转)
    CentOS安装Python教程
    Discuz! X2.5数据库字典(转)
    SQL 语句中的union操作符
    thinkphp空操作和配置文件实现简化路由
  • 原文地址:https://www.cnblogs.com/Coufusion/p/7845982.html
Copyright © 2011-2022 走看看