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章的更多相关文章

  1. python参考手册--第1章python简介

    1.if __name__ == '__main__': 直接运行myModel.py时,当前模块的名字是main:import myModel然后运行的时候当前模块的名字是myModel. 2.ev ...

  2. python参考手册--第9章

    1.读取命令行选项 (1)sys.args python启动时,命令行选项设置在列表sys.args中. sys.args[0]:xxx.py sys.args[1:]: 其他参数 (2)optpar ...

  3. python参考手册--第2章词汇和语法约定

    1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...

  4. python参考手册--第3章类型和对象

    1.对象的身份.类型.值 (1)身份:对象在内存中位置的指针,地址值, >>> a = [1,2,3,4,5] >>> id(a)48497328 >> ...

  5. 《python参考手册(第四版)》【PDF】下载

    <python参考手册(第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382222 内容介绍 本书是权威的Python语 ...

  6. 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 = ...

  7. python参考手册--第10、11章执行环境、调试

    1.解释器选项和环境 python [options] [-c cmd | filename | - ] [args] 例如:python -m pdb test.py 以脚本的形式运行库模块pdb ...

  8. 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 ...

  9. [翻译] C++ STL容器参考手册(第一章 <array>)

    返回总册 本章节原文:http://www.cplusplus.com/reference/array/array/ 1. std::array (C++11支持) template < cla ...

随机推荐

  1. jquery之音乐均衡器

    制作这个音乐均衡器需要一个equalizer插件(插件我已经上传),下面介绍一下网页的BGM的相关属性: hidden="true"表示隐藏播放,即不显示播放器的外观,若要想显示, ...

  2. .NET中开源CMS目录

    提起开源cms,大家第一想到的是php的cms,因为php开源的最早,也最为用户和站长们认可,随着各大cms系统的功能的不断完善和各式各样的开源cms的出现,.net和java的高端的cms系统也逐渐 ...

  3. echarts标准饼图解读(一)——提示框(tooltip)配置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Map的三种遍历方式

    对于Map的三种方式遍历 1.keySet() 2.values() 3.entrySet()三种方式得到Set之后,都可以使用 foreach或者iterator, 不能使用for,因为数据结构决定 ...

  5. emacs_1

    --> 正在处理依赖关系 perl(VMS::Filespec),它被软件包 perl-PathTools-3.2701-1.el5.rf.x86_64 需要---> 软件包 perl-p ...

  6. Bugzilla 使用指南

    Bugzilla安装见前一篇博客,本篇文章主要关注于如何高效合理的使用Bugzilla,作为为公司内部人员的培训使用指南. Bugzilla是一个开源的缺陷跟踪系统,它可以管理软件开发过程中缺陷的提交 ...

  7. iOS 非ARC基本内存管理系列 2-多对象内存管理(2)

    /* 多对象内存管理: 以人拥有车为例涉及到@property底层set方法管理内存的实现 注意:人在换车的时候要进行当前传入的车和人所拥有的车进行判断 */ /******************* ...

  8. HTTP 错误 404.2 解决方案

    HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面 详细错误:HTTP 错误 404.2 - Not Found ...

  9. WinForm窗体间如何传值的几种方法

    (转) 窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式: 公共静态变量: 使用共有属性: 使用委托与事件: 通过构造函数把主窗体传递到从窗体中: 一.通过静态变量 特点: ...

  10. [译]GC专家系列1: 理解Java垃圾回收

    原文链接:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/ 了解Java的垃圾回收(GC)原 ...