zoukankan      html  css  js  c++  java
  • 24-25模块和包

    模块和包
    1. 认识模块
    模块可以认为是一个py文件. 模块实际上是我们的py文件运行后的名称空间
    导入模块:
    1. 判断sys.modules中是否已经导入过该模块
    2. 开辟一个内存
    3. 在这个内存中执行该py文件
    4. 给这个内存起个名字, 一般用的是py文件的名字。返回给导入方
    如果你的py文件是启动文件, 名字是__main__

    程序的入口一般是:
    if __name__ == "__main__":
    pass
    2. import
    import 模块名
    模块名.属性/方法/类

    每个模块都有自己的独立的名称空间,每个都有一个global, 互相并不影响
    模块.属性 = 值. # 不要这么干

    3. from xxx import xxx
    from 模块 import 函数/变量
    当作自己的变量或者函数来使用

    from xxx import * 导入所有 在模块中用 __all__=[限定*可用的变量和方法]
    导入的内容都可以起别名 as

    二.包
    1. 包
    包就是一个文件夹. py2中包内必须要有一个__init__.py文件, 在python3中可以省略,但是最好都保留.
    __init__.py 当我们导入一个包的时候,默认执行这个包内的__init__.py

    python中程序单位
    一条语句 > 语句块 > 代码块(函数,类) > py文件(模块) > 包
    2. 相对导入和绝对导入
    相对导入: 相对于当前模块所在的包. 使用的时候必须在包外面启动
    绝对导入: 根据包的根目录去导入内容

    全部都依赖于 sys.path

    3. 使用包要注意的东西

    尽量在包的外面启动程序.

    三.构建glance包程序
    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) 

    1.policy.py文件中:

    #policy.py
    
    # from glance.cmd import manage  #绝对路径
    def get():
        manage.main()
        print('from policy.py')
    
    # get()   会报错, 因为此处的sys.path 为api  不能在sys.path 中找到glance
    
    
    #相对路径 ..上层文件夹   . 当前文件夹
    #相对路径只能在包外启动
    # from . import versions  #让glance同级目录下的test2 访问policy当前文件时,执行versions中的create_resource 方法
    # versions.create_resource("你好啊")
    
    # from ..cmd import manage  # #让glance 同级目录下的test2 访问policy当前文件时,执行cmd 下的manage中的main方法
    # manage.main()

    2.versions.py文件中

    #versions.py
    def create_resource(conf):
        print('from version.py: ',conf)

    3.manage.py

    #manage.py
    def main():
        print('from manage.py')

    4.models.py

    #models.py
    def register_models(engine):
        print('from models.py: ',engine)
  • 相关阅读:
    Hello world
    Kubernetes容器云平台建设实践
    工作方法决定自己的发展
    Excel中对身份证号的处理
    详解慢查询日志的相关设置及mysqldumpslow工具
    安全测试工具简介
    Redis使用
    linux centos 查看防火墙firewalld、iptables状态
    悄悄地存在这里,因为里面的一句话
    GAE Python 2009322
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9988642.html
Copyright © 2011-2022 走看看