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()
  • 相关阅读:
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 833 字符串中的查找与替换(暴力模拟)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 832 翻转图像(位运算)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    Java实现 LeetCode 831 隐藏个人信息(暴力)
    how to use automapper in c#, from cf~
  • 原文地址:https://www.cnblogs.com/Coufusion/p/7845982.html
Copyright © 2011-2022 走看看