zoukankan      html  css  js  c++  java
  • Python模块和包使用

    1、什么是模块

    模块就是一个.py的文件

    2、为什么要使用模块?

    最开始的程序(没有任何组织)----> 函数------>类----->模块------>包  为了让程序的组织结构更加灵活清晰,降低耦合性、方便管理;

    3、如何使用模块

    1、import:只能导入在当前目录、和内置的模块,使用模块里的内容需要 模块.来调用;

    2、from...import:可以导入不是同级目录的模块,导入模块之后,可以直接调用模块里的内容;

     

    3、导入模块做的3件事情

    #导入模块第一件事情 创建名称空间,用来存放模块文件中定义的名字

    #第二件事情基于刚刚创建的名称空间,找执行一遍模块文件里的内容  

    #第三件事情spm.操作名称空间模块里的内容

    4、模块的搜素路径

    总结模块的查找顺序是:内存中已经加载的模块--------->内置模块------------>sys.path路径中包含的模块(sys.path包含当前目录)

    二、包

    1、什么是包?

    包是一种通过使用‘.模块名’来组织python模块名称空间的方式。本质就一个包含__init__文件的目录

    无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都是关于 包才有的导入语法

    from .auth.plugins.core import create,UserAuthInfo
    # 在 .(当前路径)auth(auth包).plugins(包).core(模块) import( create,UserAuthInfo)属性  .左边的都是包 最后一个可以是模块
    

      

    2、使用包

    import  (import包名.包名.包名.最后是模块)

     

    import glance.db.models
    glance.db.models.register_models('mysql') 

    from (包名.包名)... import ...(import后面的是模块)

    from bao.bao1 import *

    如果import后面不指定一个模块名,只会执行包下的__init__文件

    会执行包下的__init__文件定义的__all__=[x,y.z]的内容 

    from glance.db import models
    models.register_models('mysql')
    
    from glance.db.models import register_models
    register_models('mysql')

     3、包里的__init__.py文件

    #在其他模块 导入import keystone包的时候,会首先执行keystone包下的__init__文件
    # 如果在__init__文件导入了auth.(包)plugins.(包)core(模块) import create,UserAuthInfo(方法)
    # 那么 import keystone 就可以直接执行 keystone子包下的 模块和模块里的方法了

    4、绝对导入和相对导入

    绝对导入:以glance 作为起始

    相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

    在glance/api/version.py
    
    #绝对导入
    from glance.cmd import manage
    manage.main()
    
    #相对导入
    from ..cmd import manage
    manage.main()

    5、单独导入

    #在与glance同级的test.py中
    import glance
    glance.cmd.manage.main()
    
    '''
    执行结果:
    AttributeError: module 'glance' has no attribute 'cmd'
    
    '''
  • 相关阅读:
    google.guava 实现 限流
    基于 Redisson 的限流 小 demo
    TX-LCN分布式事务-- TCC事务模式(消费者模块)
    TX-LCN分布式事务-- TCC事务模式(生产者模块)
    TX-LCN分布式事务-- LCN事务模式(消费者模块)
    TX-LCN分布式事务-- LCN事务模式(生产者模块)
    TX-LCN分布式事务-- LCN事务模式(eureka模块)
    TX-LCN分布式事务-- LCN事务模式(tm模块)
    TX-LCN分布式事务--学习地址和原理介绍
    LINQ to SQL系列三 使用DeferredLoadingEnabled,DataLoadOption指定加载选项
  • 原文地址:https://www.cnblogs.com/sss4/p/6796416.html
Copyright © 2011-2022 走看看