zoukankan      html  css  js  c++  java
  • python学习笔记 day21 包和异常

     

    包: 一大堆模块的集合 

    通俗的讲之前我们学序列化模块时,有个json 它其实是一个文件夹(里面有很多py文件),应该就算是一个包;

    然后导入包的时候,.前面一定是一个包名,然后可以有两种方式 import 包名 或者 from 包 import 模块 (这种导入方式 包那块可以有. 但是import 后面必须是一个变量名,绝对不能有.

    首先创建一系列文件夹(包)和文件(py文件 模块)

    import os
    os.makedirs('glance/api')  # 使用os.makedirs('filename1/filename2')创建文件夹
    os.makedirs('glance/cmd')
    os.makedirs('glance/db')
    L=[]   # L中存放的是一系列文件句柄
    L.append(open('glance/__init__.py','w'))
    L.append(open('glance/api/__init__.py','w'))
    L.append(open('glance/api/test1.py','w'))
    L.append(open('glance/api/test2.py','w'))
    L.append(open('glance/cmd/__init__.py','w'))
    L.append(open('glance/cmd/test1.py','w'))
    L.append(open('glance/db/__init__.py','w'))
    L.append(open('glance/db/test1.py','w'))
    map(lambda f :f.close(), L)  # 利用map()函数 主要是挨个从放着文件句柄的列表L中依次取值,然后传给lambda函数 关掉该文件

    运行结果:

    然后在api文件夹下的test1.py test2.py 文件,cmd文件夹下的test1.py 文件 和db文件夹下的test1.py 下面写相应的print()语句 或者定义函数~

    然后进行各种方式的导入:

    import glance.api.test1
    glance.api.test1

    或者这种方式:

    import glance.api.test1 as test
    test

    或者:

    from glance.api import test1
    test1

    运行结果:

    再来看一下test2.py 的内容:

    然后我们导入:

    from glance.api import test2
    test2.func()

    或者:

    from glance.api.test2 import func
    func()

    运行结果:

    然后其他文件夹(包)的py文件(模块)的导入都跟上面的类似;

    接下俩我们有一个新的需求就是在test.py(与glance文件夹位于同一级目录)中只写 import glance 就可以使用glance.api.test1 运行test1.py 文件 或者glance.api.test2.func()就可以运行api下面的test2.py中的func()函数~

    这样应该怎么操作呢?

    我们需要明确一点:导入包时,都是自动会运行该包下面的__init__.py文件!!!

    先来验证一下这个操作:

    然后我们导入 glance模块,看是否会运行glance包下面的__init__.py文件中的内容:

    所以我们可以在相应包下面的__init__.py文件中做手脚,相当于联动触发,这一级出发下一级别:

    我们先来看一下,在test.py中查看模块路径是什么样的:

    运行结果:

    所以相当于day06文件夹其实就是类似于根目录的样子~,不知道这样说对不对,反正就是test.py是在day06文件夹下嘛,所以相当于它的根目录直接就是day06 ,就是在test.py中导入模块时,优先从da'y06这个目录下面找有没有该模块,然后我们继续:

    首先在glance包下面的__init__.py中写:

    然后在 api 下面的__init__.py中:

    另外两个也一样:

    进行完上面的操作之后

    当我们在test.py中导入glance后,我们就可以 直接拿着这个包名进行操作下面的任何一个文件了:

    import glance
    glance.api.test1
    glance.api.test2.func()  # api下面的test2.py中定义了一个函数func
    glance.cmd.test1
    glance.db.test1

    运行结果:

    所以导入包的时候需要格外注意~

    另外,当你直接导入py文件或者通过包.包 导入文件(只要最后导入的是py文件 ---模块)导入的那一刻就会运行该py文件的内容;

    但是当你最后导入的是包时,它只会运行这个包下面的__init__.py这个是自动运行的~

    talk is cheap,show me the code
  • 相关阅读:
    007 连接
    006 group by having
    005 运算null 排序 模糊查询 聚合函数
    004 列、distinct、between、in、null
    003 约束和关系
    002 表的概念操作
    5-04用Sql语句创建表
    5-03使用视图创建表
    5-01表达基本概念
    4-04数据库的备份与还原
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9652650.html
Copyright © 2011-2022 走看看