1. 模块
在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用。
1.1 模块搜索路径
导入模块时,是按照sys.path变量的值搜索模块,sys.path的值是包含每一个独立路径的列表,包含当前目录、python安装目录、PYTHONPATH环境变量,搜索顺序按照路径在列表中的顺序(一般当前目录优先级最高)。
['/home/zhoujh/study_workspace/studynotes/python/python_base', '/usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg', '/usr/local/lib/python2.6/site-packages/redis-2.2.1-py2.6.egg', '/usr/local/lib/python2.6/site-packages/Flask-0.8-py2.6.egg',
'/usr/local/lib/python2.6/site-packages/Jinja2-2.6-py2.6.egg', '/usr/local/lib/python2.6/site-packages/Werkzeug-0.8.3-py2.6.egg', '/usr/local/lib/python2.6/site-packages/tornado-2.2.1-py2.6.egg', '/usr/local/lib/python2.6/site-packages/MySQL_python-1.2.3-py2.6-linux-x86_64.egg',
'/usr/local/lib/python2.6/site-packages/PIL-1.1.7-py2.6-linux-x86_64.egg', '/usr/local/lib/python2.6/site-packages/SQLAlchemy-0.7.8-py2.6-linux-x86_64.egg', '/home/zhoujh/python_workspace/python_app', '/usr/local/lib/python26.zip', '/usr/local/lib/python2.6',
'/usr/local/lib/python2.6/plat-linux2', '/usr/local/lib/python2.6/lib-tk', '/usr/local/lib/python2.6/lib-old', '/usr/local/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/site-packages']
1.2 导入模块
1.2.1 使用import语句导入模块
有下面两种方式
import module1
import module2
import module3
import module1,module2,module3
这两种方式的效果是一样的,但是第一种可读性比第二种好,推荐按照下面的顺序导入模块,并且一般在文件首部导入所有的模块
-
python标准库
-
第三方模块
-
应用程序自定义模块
也可以在函数内部导入模块,这样被导入的模块作用域是局部的
1.2.2 使用from-import语句导入模块的属性
单行导入
from module import name1,name2,name3
多行导入
from module import name1,name2,\
name3
导入全部属性(由于容易覆盖当前名称空间中现有的名字,所以一般不推荐使用,适合模块中变量名很长并且变量很多的情况)
from module import *
如果你不想某个模块的属性被以上方法导入,可以给该属性名称前加一个下划线(_test),如果需要取消隐藏,可以显示的导入该属性(from module import _test)
1.2.3 扩展的import语句
使用自定义的名称替换模块的原始名称
import simplejson as json
模块被导入时,加载的时候模块顶层代码会被执行,如:设定全局变量、类和函数的声明等,所以应该把代码尽量封装到类和函数中。一个模块无论被导入多少次,只加载一次,可以防止多次导入时代码被多次执行。
1.2.4 重新导入模块
reload(module)
内建函数reload可以重新导入一个已经存在的模块
2. 包
包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。
一个普通的python应用程序目录结构:
app/
__init__.py
a/
__init__.py
a.py
b/
__init__.py
b.py
app是最顶层的包,a和b是它的子包,可以这样导入:
from app.a import a
from app.b.b import test
a.test()
test()
上面代码表示:导入app包的子包a和子包b的属性test,然后分别调用test方法。每个目录下都有__init__.py文件,这个是初始化模块,from-import语句导入子包时需要它,可以在里面做一些初始化工作,也可以是空文件。ps:__init__.py定义的属性直接使用 顶层包.子包 的方式导入,如在目录a的__init__.py文件中定义init_db()方法,调用如下:from app import a
a.init_db()
3. 指定python文件编码方式python默认是使用ASCII编码,可以指定编码方式,如
#!/usr/bin/env python
#coding=utf-8
或者
#!/usr/bin/env python
# -*- coding:utf-8 -*-
4. 解决导入循环问题有下面两个模块,a.py和b.pya.py
#!/usr/bin/env python
#coding=utf-8
import b
if __name__ == '__main':
print 'hello,I'm a'
b.py
#!/usr/bin/env python
#coding=utf-8
import a
if __name__ == '__main':
print 'hello,I'm b'
在这里a尝试导入b,而b也尝试导入a,导入一个先前没有完全导入的模块,会导致导入失败。解决办法:移除一个导入语句,把导入语句放到函数内部,在需要的时候导入。b.py
#!/usr/bin/env python
#coding=utf-8
if __name__ == '__main':
import a
print 'hello,I'm b'
5. 使用技巧创建一个目录python_apps,编辑~/.bashrc,设定环境变量PYTHONPATH的值为该目录的路径。
export PYTHONPATH=/home/zhoujh/python_apps:$PYTHONPATH
然后在python_apps目录下做一个软链接至应用的目录,假如要运行的应用路径为:/home/zhoujh/python_workspace/app
ln -s /home/zhoujh/python_workspace/app ./app
这样以后添加新的应用,只需在该目录下创建一个链接就行。
转载请注明来自:Alex
Zhou,本文链接:http://codingnow.cn/python/265.html
分享到:
相关推荐
python模块笔记,python模块和包知识讲解
11-Python 模块和包.md
第10.11节 Python模块和包小结.rar
这篇文章主要介绍了python模块和包的应用BASE_PATH使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中的模块(module)是管理python应用程序的工具...
Python计划. 计算生态构建.第一周 Python 模块和包2-1.zip
Python计划. 计算生态构建.第一周 Python 模块和包2-2.zip
第10章 Python的模块和包.rar
Python 模块和包 Python 常见模块 Tkinter Python 文件操作(I/O) Python 数据库编程 Python 并发编程 Python 网络编程 Python 文档和测试 Python 打包和发布 Python 数据可视化 Python Scrapy 网络爬虫
python学习笔记,包含模块和包,异常,警告和文件读写
第十一章 Python模块和包 第十二章:Python常见模块 第十三章:Tkinter 第十四章:Python文件操作 第十五章:Python数据库编程 第十六章:Python并发编程 第十七章:Python网络编程 第十八章:Python文档和测试 第十...
第6天:Python 模块和包 第7天:Python 序列 第8天:Python 列表 第9天:Python 元组 第10天:Python 类与对象 第11天:Python dictionary 第12天:Python 之引用 第13天:Python 输入输出 第14天: Web开发 Flask...
- Python模块和包:模块的导入、包的创建和使用等。 2. Python面向对象编程 - 类和对象的概念,如何定义类和创建对象。 - 继承和多态的实现方式。 - 常用的Python标准库中的类,如文件操作、异常处理等。 3. ...
内容概要:本资源主要是用于《Python 基础合集10:模块和包(下)--发布属于自己的第一个模块包》一文,将文中提到的相关代码打包之后上传,以便读者可以更好使用和理解整个代码的逻辑。 资源中包含了4个代码包,...
深度学习入门-Python语言学习-17模块和包-入门学习
python 零基础学习篇
python与mysql基础-18-模块和包的总结.ev4.rar
Python中的模块和包 文章目录Python中的模块和包一、类属性和类方法01. 类的结构1.1 术语 —— 实例1.2 类是一个特殊的对象02. 类属性和实例属性2.1 概念和使用2.2 属性的获取机制03. 类方法和静态方法3.1 类方法3.2...
主要介绍了Python中的模块和包概念介绍,本文讲解了模块概述、模块名称空间、导入模块、导入模块属性(from … import …)、包等内容,需要的朋友可以参考下
python 零基础学习篇