python基础教程总结9——模块,包,标准库

1. 模块

  在python中一个文件可以被看成一个独立模块,而包对应着文件夹,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用。

1.1 模块搜索路径

  导入模块时,是按照sys.path变量的值搜索模块,sys.path的值是包含每一个独立路径的列表,包含当前目录、python安装目录、PYTHONPATH环境变量,搜索顺序按照路径在列表中的顺序(一般当前目录优先级最高)。

1 >>> import sys
2 >>> sys.path
3 [‘‘, ‘E:\\Python27\\Lib\\idlelib‘, ‘C:\\windows\\system32\\python27.zip‘, ‘E:\\Python27\\DLLs‘, ‘E:\\Python27\\lib‘, ‘E:\\Python27\\lib\\plat-win‘, ‘E:\\Python27\\lib\\lib-tk‘, ‘E:\\Python27‘, ‘E:\\Python27\\lib\\site-packages‘]

1.2 导入模块

1.2.1 使用import语句导入模块

  有下面两种方式

import module1
import module2
import module3

import module1,module2,module3

  这两种方式的效果是一样的,但是第一种可读性比第二种好,推荐按照下面的顺序导入模块,并且一般在文件首部导入所有的模块

  • python标准库
  • 第三方模块
  • 应用程序自定义模块

  也可以在函数内部导入模块,这样被导入的模块作用域是局部的

1.2.2 使用from-import语句导入模块的属性

  单行导入

1 from module import name1,name2,name3

  多行导入

from module import name1,name2,                   name3

  导入全部属性(由于容易覆盖当前名称空间中现有的名字,所以一般不推荐使用,适合模块中变量名很长并且变量很多的情况)

1 from module import *

  如果你不想某个模块的属性被以上方法导入,可以给该属性名称前加一个下划线(_test),如果需要取消隐藏,可以显示的导入该属性(from module import _test)

1.2.3 扩展的import语句
  使用自定义的名称替换模块的原始名称

import simplejson as json

  模块被导入时,加载的时候模块顶层代码会被执行,如:设定全局变量、类和函数的声明等,所以应该把代码尽量封装到类和函数中。一个模块无论被导入多少次,只加载一次,可以防止多次导入时代码被多次执行。

1.2.4 重新导入模块reroad

1)import

  import作用:导入/引入一个python标准模块,其中包括.py文件、带有__init__.py文件的目录。

import module_name[,module1,...]
from module import *|child[,child1,...]  

  说明:多次重复使用import语句时,不会重新加载被指定的模块,只是把对该模块的内存地址给引用到本地变量环境。
  

a.py
#!/usr/bin/env python
#encoding: utf-8
import os
print ‘in a‘,id(os)  

m.py
#!/usr/bin/env python
#encoding: utf-8
import a   #第一次会打印a里面的语句
import os  #再次导入os后,其内存地址和a里面的是一样的,因此这里只是对os的本地引用
print ‘in c‘,id(os)
import a  #第二次不会打印a里面的语句,因为没有重新加载  

#结果

in a 23124144
in c 23124144

  

2)reroad
  作用:对已经加载的模块进行重新加载,一般用于原模块有变化等特殊情况,reload前该模块必须已经import过。

import os
reload(os)

  说明:reload会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块;

     reload后还是用原来的内存地址;

     不能支持from。。import。。格式的模块进行重新加载。

 1 a.py
 2 #!/usr/bin/env python
 3 #encoding: utf-8
 4 import os
 5 print ‘in a‘,id(os)
 6
 7 m.py
 8 #!/usr/bin/env python
 9 #encoding: utf-8
10 import a   #第一次import会打印a里面的语句
11 print id(a) #原来a的内存地址
12 reload(a)  #第二次reload还会打印a里面的语句,因为有重新加载
13 print id(a) #reload后a的内存地址,和原来一样  

#结果

>>>
in a 23058608
29617680
in a 23058608
29617680
>>>

2. 包

  包是另外一种模块,可以包含其他模块;

  模块存储在文件中时(拓展名.py),包就是模块所在的目录;

  包必须包括一个__init__.py的文件(模块),若将其作为普通模块导入文件内容就是包的内容

#名为constants的包,文件constants/__init__.py包括语句PI=3.14

import constants
print constants.PI

  为了将模块放置在包内,直接把模块放在包目录内即可:

  


1

3. 指定python文件编码方式
python默认是使用ASCII编码,可以指定编码方式,如


1

2

#!/usr/bin/env python

#coding=utf-8

或者


1

2

#!/usr/bin/env python

# -*- coding:utf-8 -*-

4. 解决导入循环问题
有下面两个模块,a.py和b.py
a.py


1

2

3

4

5

6

7

#!/usr/bin/env python

#coding=utf-8

import b

if __name__ == ‘__main‘:

    print ‘hello,I‘m a‘


1

b.py


1

2

3

4

5

6

7

#!/usr/bin/env python

#coding=utf-8

import a

if __name__ == ‘__main‘:

    print ‘hello,I‘m b‘

在这里a尝试导入b,而b也尝试导入a,导入一个先前没有完全导入的模块,会导致导入失败。解决办法:移除一个导入语句,把导入语句放到函数内部,在需要的时候导入。
b.py


1

2

3

4

5

6

#!/usr/bin/env python

#coding=utf-8

if __name__ == ‘__main‘:

    import a

    print ‘hello,I‘m b‘

5. 使用技巧
创建一个目录python_apps,编辑~/.bashrc,设定环境变量PYTHONPATH的值为该目录的路径。


1

export PYTHONPATH=/home/zhoujh/python_apps:$PYTHONPATH

然后在python_apps目录下做一个软链接至应用的目录,假如要运行的应用路径为:/home/zhoujh/python_workspace/app


1

ln -s /home/zhoujh/python_workspace/app ./app

这样以后添加新的应用,只需在该目录下创建一个链接就行。

时间: 2024-11-05 22:31:45

python基础教程总结9——模块,包,标准库的相关文章

Python基础--人们一些最爱的标准库(sys os fileinput)

这篇博客就介绍介绍常见的.人们钟爱的python中的标准库. sys 从字面上也能看出来,是system的缩写.这个模块能够访问与python解析器紧密联系的变量和函数. argv 命令行参数 exit 退出当前程序 modules 映射模块名到载入模块的字典 path 目录 platform 平台标识符 stdin 标准输入 stdout 标准输出 stderr 标准错误流 应用,反向打印命令名参数: import sys args = sys.argv[1:] args.reverse()

Python基础--人们一些最爱的标准库(random time)

Python继续! random 包括返回随机数的函数. 这里跟C++一样,产生的是伪随机数,并非全然随机数. random中一些重要的函数: random() 返回0<n<=1的随机数n getrandbits(n) 以长整型形式返回n个随机位 uniform(a, b) 返回随机数n, a<=n<b choice(seq) 从序列seq中返回任意元素 shuffle(seq[,random]) 原地指定序列seq sample(seq, n) 从序列seq中选择n个随机且独立的

python基础教程_学习笔记17:标准库:一些最爱——time

标准库:一些最爱 time time模块所包含的函数能够实现以下功能: 获取当前时间.操作系统时间和日期.从字符串读取时间以及格式化时间为字符串. 日期可以用实数(从"新纪元"的1月1日0点开始计算到现在的秒数,新纪元是一个与平台相关的年份,对unix来说是1970年),或者是包含有9个整数的元组. 日期元组的字段含义 如元组: (2008,1,21,12,2,56,0,21,0) 表示2008年1月21日12时2分56秒,星期一,且是当年的第21天(无夏令时). 索引 字段 值 0

python基础教程_学习笔记12:充电时刻——模块

充电时刻--模块 python的标准安装包括一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 任何python程序都可以作为模块导入. $ cat hello.py #!/usr/bin/python print "Hello,signjing!" $ ./hello.py Hello,signjing! 假设将python程序保存在/home/ggz2/magiccube/mysh/p

《Python基础教程(第二版)》学习笔记 -&gt; 第十章 充电时刻 之 标准库

SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg])                退出当前的程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 平台标识符 stdin 标准输入流-- 一个类文件对象 stdout 标准输出流-- 一个类文件对象 stderr

python基础教程_学习笔记16:标准库:一些最爱——random

标准库:一些最爱 random random模块包括返回随机数的函数,可以用于模拟或者用于任何产生随机输出的程序. 事实上,所产生的数字都是伪随机数,它们以一个可预测的系统作为基础,除非是为了强加密的目标,否则这些随机数还是足够随机的.如果真的需要随机性,可以使用os模块的urandom函数. 重要函数 函数 描述 random() 返回0<=n<1之间的随机实数n,其中0<n<=1 getrandbits(n) 以长整型形式返回n个随机位(二进制数) uniform(a,b) 返

python基础教程_学习笔记14:标准库:一些最爱——re

标准库:一些最爱 re re模块包含对正则表达式的支持,因为曾经系统学习过正则表达式,所以基础内容略过,直接看python对于正则表达式的支持. 正则表达式的学习,见<Mastering Regular Expressions>(精通正则表达式) re模块的内容 最重要的一些函数 函数 描述 compile(pattern[,flags]) 根据包含正则表达式的字符串创建模式对象 search(pattern,string[,flags]) 在字符串中寻找模式 match(pattern,st

python基础教程_学习笔记20:标准库:一些最爱——os

标准库:一些最爱 os os模块为你提供了访问多个操作系统服务的功能. os和它的子模块os.path还包括一些用于检查.构造.删除目录和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和变量 函数/变量 描述 environ 对环境变量进行映射 system(command) 在子shell中执行操作系统命令 sep 路径中的分隔符 pathsep 分隔路径的分隔符 linesep 行分隔符('\n','\r','\r\n') urandom(n) 返回n字节的加密强随机数据 os

python基础教程_学习笔记13:标准库:一些最爱——sys

标准库:一些最爱 sys sys这个模块让你能够访问与python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描述 argv 命令行参数,包括脚本名称 exit([arg]) 退出当前程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 类似sunos5或者win32的平台标识符 stdin 标准输入流--一个类文件对象 stdout 标准输出流--一个类文件对象 stde