python参考手册--第8章
1.模块和import
(1)首次import module会做以下3件事:
a)创建新的命名空间,用作在该源文件中定义的所有对象的容器。在模块中定义的函数和方法在使用global语句时将访问该命名空间。
b)在新创建的命名空间中执行模块中包含的代码。
c)在调用函数中创建名称来引用模块命名空间,这个名称和模块的名称相匹配。
(2)用于引用模块的名称可以使用as限定符进行更改:
import spam as sp
sp.foo()
别名只在使用了import spam as sp的调用文件中起作用,其他源文件不起作用
使用场景:模块作为python中的第一类对象,可以分配给变量,作为参数传递
if format == 'xml':
import xmlReader as reader
elif format == 'csv':
import csvReader as reader
实现了与抽象工厂模式相同功能!
(3)sys.modules:查看当前加载的所有模块
(4)import模块可以在程序中任意位置,但只import和加载一次。
(5)使用里面的函数及类时要在前面加module的名称(即命名空间):
spam.foo()
2.模块和from
(1)from语句将其他模块module1中的具体定义加载到当前模块module2的命名空间,不会为module1创建新的命名空间。使用的时候不会加module的名字(即命名空间),因为他就在当前的命名空间里
from spam import foo
foo()
引入多个定义:
from spam import (doo,foo,moo)
from spam import *
3.python源文件以主程序执行
(1)__name__
python spam.py执行该源文件。每个模块定义了一个包含模块名称的变量__name__,解释器的顶级模块名为__main__。
通常通过判断__name__是否为__main__来引导进入单元测试
def main():
unittest.main()
if __name__ == '__main__':
main()
4.模块搜索路径
(1)sys.path
解释器在sys.path路径中搜索字典,第一个为'',表示当前正在使用的字典。加载模块时按顺序依次搜索。
>>> sys.path
['', 'C:\\Python27\\Lib\\idlelib', 'C:\\Python27\\lib\\site-packages\\python_memcached-1.53-py2.7.egg', 'C:\\Python27\\lib\\site-packages\\chardet-2.2.1-py2.7.egg', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
可以把.py文件放入.zip或者.egg文件中,然后添加进sys.path
import sys
sys.path.append("mymodules.zip")
(2)模块加载
import可加载的模块分为4类
a)*.py文件
b)已编译成共享库或DLL的C、C++扩展
c)包含一组模块的包
d)使用C编写并连接到python解释器的内置模块
首次导入模块时,它会被编译为字节码并作为.pyc文件写回磁盘(-O选项,删除了行号,断言,调试信息)。在后续的导入中,解释器将加载这段预编译的字节码,除非.py文件的修改日期要更新一些(会重新生成.pyc)。.pyc文件与解释器的-O选项结合使用。 如果选项是-OO,则生成.pyo文件,除了删除行号,断言,调试信息,还会删除文档字符。
只有import语句才会生成.pyc或者.pyo。而通过命令行启动python xxx.py 时,不会生成pyc,pyo文件。
pyc,pyo文件与具体的python版本相关,也可以通过解释器中用-B来禁止生成。
5.包
(1)__init__.py
包通常用于解决模块命名空间冲突问题,包下面有多个.py文件。
包的创建:在目录中创建__init__.py即创建了包
import包下面的模块: import mypackage.mymodule
第一次导入包都会执行__init__.py,可以在__init__.py中定义__all__ = ['module1','module2','module3']来指出该package包含的modules。从而可以通过from mypackage import *导入该包下面的modules。
(2)相对导入
from ..subpackage2 import module3
相对导入只能通过from import导入。
6.包的分发和安装
(1)setup.py
目录结构如下:
/spam
readme.txt
Documentation.txt
libspam.py
/spampkg
__init__.py
foo.py
bar.py
runspam.py
在顶级目录创建setup.py文件,
#setup.py
from distutils.core import setup
setup(name='spam',version='1.0',py_modules=['libspam'],packages=['spampkg'],scripts=['runspam.py'])
执行python setup.py sdist将会在spam/dist下创建一个归档文件spam-1.0.tar.gz或者spam-1.0.zip
安装:
unzip spam-1.0.zip
cd spam
python setup.py install
此外:
python setup.py bdist将创建一个二进制分发程序
python setup.py bdist_wininst用于在windows下创建一个.exe文件
7.安装第三方库
第三方库资源:http://pypi.python.org下载压缩文件,然后解压之后,运行python setup.py install,默认安装在site-packages目录下,
也可以指定到其他目录:python setup.py install --prefix=/home/www/pypackages,但要将该目录加入到sys.path,否则找不到。
8.打印异常信息
except:
print sys.exc_info()[0],sys.exc_info()[1] ##一般来说这样就足够了
python参考手册--第8章的更多相关文章
- python参考手册--第1章python简介
1.if __name__ == '__main__': 直接运行myModel.py时,当前模块的名字是main:import myModel然后运行的时候当前模块的名字是myModel. 2.ev ...
- python参考手册--第9章
1.读取命令行选项 (1)sys.args python启动时,命令行选项设置在列表sys.args中. sys.args[0]:xxx.py sys.args[1:]: 其他参数 (2)optpar ...
- python参考手册--第2章词汇和语法约定
1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...
- python参考手册--第3章类型和对象
1.对象的身份.类型.值 (1)身份:对象在内存中位置的指针,地址值, >>> a = [1,2,3,4,5] >>> id(a)48497328 >> ...
- 《python参考手册(第四版)》【PDF】下载
<python参考手册(第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382222 内容介绍 本书是权威的Python语 ...
- python参考手册--第4、5、6、7章
1.zip zip(s,t):将序列组合为一个元组序列[(s[0],t[0]), (s[1],t[1]), (s[2],t[2]), (s[3],t[3]),...] >>> s = ...
- python参考手册--第10、11章执行环境、调试
1.解释器选项和环境 python [options] [-c cmd | filename | - ] [args] 例如:python -m pdb test.py 以脚本的形式运行库模块pdb ...
- python参考手册 Read
P28 复制 a = [1,2,3,[1,2]] b = a b is a # True c = list[a] # shallow copy c is a # False c[3][0] = 100 ...
- [翻译] C++ STL容器参考手册(第一章 <array>)
返回总册 本章节原文:http://www.cplusplus.com/reference/array/array/ 1. std::array (C++11支持) template < cla ...
随机推荐
- oracle手动启动服务
开始-控制面板->管理工具->服务->右键属性 oracle服务设定都是手动启动的,开机时只需要启动3个服务就好了: OracleOraDb11g_home1ClrAgent Ora ...
- IE 8 中 parseInt 的注意点
今天碰到个坑爹的问题,一句 parseInt(StringNum) 在 IE 8 里面居然会出错,后来发现是因为 IE 8 中 parseInt("08") 和 parseInt( ...
- C++对象的JSON序列化与反序列化探索完结-列表的序列化与反序列化
在前两篇文章中,我们已经完成对普通对象以及复杂对象嵌套的序列化与反序列化,见如下地址: C++对象的JSON序列化与反序列化探索 C++对象的JSON序列化与反序列化探索续-复杂对象的序列化与反序列化 ...
- Windows Phone 8.1 列表控件(1):基本
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...
- [转载]mysql慢日志文件分析处理
原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...
- Hibernate的单向OneToMany、单向ManyToOne
单向OneToMany 一个用户有多张照片,User----->Images是一对多关系,在数据库中Images维护一个外键useid 1.在映射关系的主控方Image这边,我们什么都不做.(为 ...
- 开发问题记录——AE开发提示80040111错误
System.runtime.interpServices.ComException(0X80040111): 80040111 ClassFactory无法供应请求的类(异常来自HRESULT:0X ...
- DTCMS自定义标签,获取所有栏目文章列表TOP,以及文章通用URL
网站最近更新等地方,发现DTCMS没有获取所有栏目文章列表的标签,只能自己写 思路:获取所有栏目文章列表不难,难点在于linkurl的写法 1.制作获取所有文章列表标签 DTcms.Web.UI\La ...
- Unity学习笔记(2):注册映射
在上一篇文章中(认识Unity)中概要介绍了Unity和Ioc,本节主要介绍IoC中的注册映射,并使用代码和配置文件两种方式进行说明. 定义依赖注入相关信息 定义ILogger接口 public in ...
- HTML 中的字符集、ASCII、 ISO-8859-1、符号之间的关系和 HTML URL 编码注意的事项
一.HTML 实体 1.什么是HTML 实体? 在 HTMl 中,某些字符是保留的.小于号 (<) 和 大于号 (>), 浏览器会误认为是标签 如果希望正确地显示预留字符,必须在 HTML ...