Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9136855
  • 博文数量: 1725
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19840
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1725)

文章存档

2024年(1)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Windows平台

2018-01-09 17:15:35

模块的搜索路径: 1. 首先从 sys.path中寻找,   2. 从 环境变量 PYTHONPATH中寻找.

模块导入: 会导入模块的所有对象,包括变量, 函数,数据类型和子模块,  除了以下划线引导的对象(私有对象
)
import importable
import importable1, importable1, importable2...
import importable as preferred_name  #重命名, 好用在两个模块A/B拥有同样API时, 先 Import A as m, 用完之后 再用 import B as m , 这样就可以还是使用m, 但是利用是 B 内的API.

导入部分的写法
from importable import object as preferred_name
from importable import object_1, obj2, obj3,...
from importable import (obj1, obj2,....)
from importable import *  #* 代表引入非私有的一切对象, 如果模块中存在 __all__变量, name导入的应该是名称包含在__all__变量中的所有对象.

python的模块导入, 是以字节码(编译后的形式)把模块加载到内存中的.
1. 首先找同名的 .pyo 结尾的文件(最优化的字节码编译版本), 如果不存在或者pyo比py旧,在进行步骤2
2. 找同名的 .pyo 结尾的文件(非最化的字节码编译版本), 如果不存在或者pyc比py旧,在进行步骤3
3. 找到 py 文件, 并将它编译为字节码版本, 然后加载.


pyo 文件是由 python -O xxx.py 或者 指定了 PYTHONOPTIMIZE环境变量设置为O时产生(即抛弃断言assert的版本). 而 pyc 是默认产生的字节码文件.

----------------------------------------------------------------------------------------------------------------------
自定义模组
1. 使用 python -c "import music"  查看music模组是否存在.
2. 自定模组尽量第一个字母大写, 以便避免名字冲突. (因为所有标准库的模块都是小写命名的)
----------------------------------------------------------------------------------------------------------------------
包:  目录, 包含一组模块和一个 __init__.py 文件.

引入包: 
    import 目录名.模块名 as xxx    # as 可选, 没有as 时访问应当使用 目录名.模块名 全称
    from 目录名 import 模块名  as xxx # as 可选, 可以直接使用模块名或者 xxx

    制作包:
    1. 建立子目录, 加入所有的模块.py 和一个 空的 __init__.py 文件, 就是最简单的一个包.
    2. 在 __init__.py 中加入 __all__ = ["模块名", "模块名", ...] , 然后在其他py文件中就可以直接使用 from 目录名 import * . 因为 * 表示导入在__all__列表的所有模块名, 并且可以直接进行模块名的使用.
    注意: from 模块名 import * 为模块中所有的对象.(包括函数,变量)都被导入, 除私有对象(_打头的变量或者函数), 当然模块中也可以存在一个 __all__列表, 代表可以导出的内容.
----------------------------------------------------------------------------------------------------------------------
自定义模块的docstring.
docstring: 形式一般为第一行为概括描述, 第二空行, 第三行描述和实例.  其中实例部分要求 >>> 命令行输入 然后下一行为命令行的输出.

1. py文件一般第一行shebang, 第二行为注释 #版权或者许可(CopyRight(c) 2018. NF Ltd. All rights reserved.) 第三行为 ''' ''' 包括的docstring, 包括模块的内容概括以及使用示例.

在文件末尾加入
if __name__ == "__main__":
    import doctest
    doctest.testmod()  则执行docstring的实例.  即python3 -v my.py. 尝试运行docstring中的所有发现的代码段.

2. py内部的函数 def 行后也应该有 docstring, 

----------------------------------------------------------------------------------------------------------------------
自定义模块的分发:
1. 把文件放在python的site-packages子目录中.
2. 或者单独建立目录, 在PYTHONPATH环境变量中包括此目录.
3. 把文件放在本地site-packages目录中, 例如 %APPDATA%/Python/Python3.5/site-packages 或者 ~/.local/lib/python3.5/site-packages/
----------------------------------------------------------------------------------------------------------------------
任何模块被导入后, 每个模块拥有一个__name__变量, 此变量为模块名,  但当py文件被运行而不是被导入时, __name__变量为 __main__
----------------------------------------------------------------------------------------------------------------------



阅读(1000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~