zoukankan      html  css  js  c++  java
  • python--包的导入

    1,包

    定义:把解决一类问题的模块放在同一个文件夹里 

    导入语法:在import    from...import导入语句中(而不是在使用时)遇到带点

    本质:就是一个包含__init__.py文件的目录,在py2中,必须有__init__.py文件,py3没有也可以执行。包只是模块的一种形式而已,包即模块,是为了导入方便使用,2.

    2,导入包的两种方式:

    使用绝对路径 不管在包内部还是外部 导入了就能用
    不能挪动,但是直观
    绝对路径:以glance作为起始
    可以随意移动包 只要能找到包的位置,就可以使用包里的模块
    包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了
    相对路径
    相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
    相对导入只能用from的形式。
    from ..cmd import manage
            manage.main()

    3,自己创建一个包

    import os
    os.makedirs('glance/api')
    os.makedirs('glance/cmd')
    os.makedirs('glance/db')
    l = []
    l.append(open('glance/__init__.py','w'))
    l.append(open('glance/api/__init__.py','w'))
    l.append(open('glance/api/policy.py','w'))
    l.append(open('glance/api/versions.py','w'))
    l.append(open('glance/cmd/__init__.py','w'))
    l.append(open('glance/cmd/manage.py','w'))
    l.append(open('glance/db/__init__.py','w'))
    l.append(open('glance/db/models.py','w'))
    map(lambda f:f.close() ,l)

    4,创建完包之后,导入模块。但有一种导入模块方式是不对的

    import glance
    glance.cmd.manage.get()
    glance.api.policy.get()
    glance.db.models.get()
    分析错误原因:
    这种导入包的模式是错误的,因为glance导入后,sys.path中只有到glance上一级的目录,
    可以通过sys.path 查看,而在glance.cmd.manage.get() 调用的时候,
    glance执行它的__inint__,找不到cmd/api/db文件, 所以要在每一层的init分别导入关联路径

     解决方发:

    glance/
    
    ├── __init__.py      from glance import api
                                 from glance import cmd
                                 from glance import db
    
    ├── api
    
    │   ├── __init__.py  from glance.api import policy
                                  from glance.api import versions
    
    │   ├── policy.py
    
    │   └── versions.py
    
    ├── cmd                 from glance.cmd import manage
    
    │   ├── __init__.py
    
    │   └── manage.py
    
    └── db                   from glance.db import models
    
        ├── __init__.py
    
        └── models.py
    解决方法

     5,import glance之后直接调用模块中的方法

    glance/
    
    ├── __init__.py     from .api import *
                        from .cmd import *
                        from .db import *
    ├── api
    
    │   ├── __init__.py   __all__ = ['policy','versions']
    
    │   ├── policy.py
    
    │   └── versions.py
    
    ├── cmd               __all__ = ['manage']
    
    │   ├── __init__.py
    
    │   └── manage.py
    
    └── db                __all__ = ['models']
    
        ├── __init__.py
    
        └── models.py
    import glance
    policy.get()
     

     6,软件开发规范

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/8278938.html
Copyright © 2011-2022 走看看