python模块(2)

模块

  1. import如何工作

    导入只发生一次
    2. 找到模块文件
    3. 编译成位码(需要时)
    4. 执行模块的代码来创建其所定义的对象

    Python把导入的模块存贮到sys.moudles表中,并在导入操作的时候检查该表,如果模块不存在,将会启动上面三个步骤。

  2. 搜索

    大多数情况下,可以依赖模块导入的路径来搜索路径,不需要额外配置路径。但是,也可以自己预定义路径,那么搜索的顺序:

    1. 程序的主目录

    2. PYHONPATH目录(如果已经进行了设置)

       import sys
       print(list(sys.path))
       #手动添加目录
       sys.path.append('c:\\python\\modules')
       sys.path.append('c:/python/modules')
      
    3. 标准链接库目录

    4. 任何.pth文件的内容(如果存在的话)

      在python安装路径的site-packages目录下修建了PckPath.pth文件

       /Users/lzhan/AI/python/project_modules/modules
      
  3. 编译

    当文件导入时,就会进行编译。因此、通常不会看到程序顶层文件的.pyc字节码文件。除非这个文件也被其他文件导入:只有被导入的文件才会留下字节码文件。顶层文件的字节码是在内部使用后就丢弃了。

  4. 执行

    和def一样,import和form是可执行语句,而不是在编译期间的声明。直到python执行到这些语句时,才会进行解析。

  5. distutils

    Distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块。

  6. from

    from会把模块中的变量复制到另一个作用域,所以顶层文件中就可以直接使用该变量了。

     import modulea
     from modulea import * #等价
    

    from语句智能用在模块文件的顶部,不能放在函数中。

    所以下面代码是等价的

     from module import name1,name2
     #等价于
     import module
     name1=module.name1
     name2=module.name2
     del module
    

    from语句有破坏命名空间的潜质!!

  7. 查看模块命名空间

    import public_var as p
    print(p.dict)
    print(dir§)

  8. reload()

    1. reload是Python的内置函数,而不是语句

    2. reload只能重载已经存在的模块对象,而不是变量

    3. relaod必须手动导入

       import public_var as p
       from importlib import reload
       
       print(p.urls['first'])
       
       p.urls['first']='baidu.com'
       
       print(p.urls['first'])
       
       reload(p)
       print(p.urls['first'])
      
  9. 包导入

     import modules.public_var
     from modules.public_var import *
    

    注意
    作为包的目录内必须存在__init__.py文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值