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'
    
    '''
  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/sss4/p/6796416.html
Copyright © 2011-2022 走看看