Python入门笔记(23):模块
2015-02-23 17:56
260 查看
一、模块基础
1、模块
自我包含,且有组织的代码片段就是模块
模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。
每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以由两个语句和一个重要的内置函数进行处理。
import: 使客户端(导入者)以一个整体获取一个模块。
from:容许客户端从一个模块文件中获取特定的变量名。
reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。
参考:http://ipseek.blog.51cto.com/1041109/795782
2、名称空间
一个名称空间就是从名称到对象的关系隐射集合。
每一个模块都定义的自己唯一的名称空间,如:
向名称空间添加名称的操作过程涉及绑定标识符到指定对象的操作(以及给对象的引用计数加1)。
3、搜索路径和路径搜索
模块的导入需要叫做“路径搜索”的过程。
搜索路径:查找一组目录
路径搜索:查找某个文件的操作
这种错误就是说:模块不在搜索路径里,从而导致路径搜索失败!
导入模块时,不带模块的后缀名,比如.py
Python搜索模块的路径:
1)、程序的主目录
2)、PTYHONPATH目录(如果已经进行了设置)
3)、标准连接库目录(一般在/usr/local/lib/python2.X/)
4)、任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去
.pth后缀的文本文件中一行一行的地列出目录。
这四个组建组合起来就变成了sys.path了,
二、模块导入
1、import语句
推荐:
import放在程序前面,且按照Python标准库模块、Python第三方模块、自定义模块的顺序从上到下排开。
2、from-import语句
可以导入模块中指定属性:from module import name1[,nam2[,...nameN]]
注意:
(1)、导入可使用\进行换行,
如:from module import nam1,name2,\
name3,name4....
(2)、不推荐from module import *
(3)、使用as更换名称:
from module import name1 as name2
3、模块导入的特征
(1)、载入时执行模块,也就是导入模块的顶层代码将会被执行,通常包括该模块内全局变量、类和函数的声明。我们尽可能多的把代码封装到函数中,这是良好的模块编程习惯。
(2)、一个模块可被导入(import)多次,但是只加载(load)一次.
4、模块内建函数
(1)、__import__():导入模块的函数
import语句实际上调用__import__()函数
如果我们有一个testa.py文件,我们可以用module=__import__('testa')来导入它。这样可以用module.属性来使用testa.py中的属性
其他见书
三、包
1、包的概念
包是一个有层次的文件目录结构,由模块和子包组成。
2、解析包机制:
每一个.py文件称为一个module,module之间可以互相导入
module可以定义在包里面.Python定义包的方式稍微有点古怪,假设我们有一个parent文件夹,该文件夹有一个child子文件夹.child中有一个module a.py . 如何让Python知道这个文件层次结构?很简单,每个目录都放一个名为_init
_.py 的文件.该文件内容可以为空.这个层次结构同上:
参考:http://huangliangfeixu.blog.163.com/blog/static/18974706220112741040442/
3、python中__init__.py文件的作用
python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。
那么,__init__.py还有什么别的功能呢?
其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。
点击继续阅读:
4、导入
参考上面的图片
import web.web_catch
import web.child_web.demo
from web.child_web import demo
转载来源:http://www.cnblogs.com/BeginMan/p/3183656.html
自己的总结:
1. Python程序运行时可以直接调用标准库模块中的函数,不用import它们,
可以使用help('modules')查看标准库模块;
2. 模块初次导入时,模块顶层程序代码(不在函数内的代码)会被执行,
def 定义的函数类,他们也称为语句,会被执行,但函数内的代码不会被执行,
直到它们被调用。
a.py:
print('hello i am module a')
def afunc():
print('i am a func')
b.py:
import a #导入a模块时,会执行a模块中顶层程序代码(不在函数内的代码)
print('i am module b')
a.afunc() #模块文件也是对象,故可以直接调用a模块中的函数,这就是为什么import re后,可以使用
re.compile
输出:
hello i am module a
i am module b
i am a func
#导入一个模块后,该模块对象就已经存在了,此时就可以调用该模块对象中的方法了。
3. import modulename和from module import name的区别
import modulename导入整个模块,包括生成一个以模块名命名的名称空间
from module import name只导入指定模块的部分属性至当前名称空间,使用时不必加模块前缀,
可以直接使用其名称,故,如果导入模块的名称与当前名称空间的名称重复了,会覆盖。
如:from random import randint,choice,此时,可以直接使用randint,而不需要random.randint这样
来使用。
a.py:
vara = 'hello i am from module a'
b.py:
vara = 'hello i am from module b'
from a import vara #重新被赋值
print(vara) #输出hello i am from module a
4. 导入两个模块a和b,两个模块中有相同名字的函数,如a.func和b.func,在调用它们时
并不会产生冲突,因为导入时,会生成一个以模块名命名的名称空间,并把该名称空间导入,
又如:list.pop()和dict.pop(),一个属于列表名称空间,一个属于字典名称空间;
上面list和dict都是类型,分别在两个模块中。
5. 模块就是一个名称空间,可以使用__dict__获取,如:
import random
random.__dict__
6. 导入模块例子:
/tmp/mypkg目录下有mymod.py和__init__.py文件,并且/tmp在Python的搜索路径下,此时可以
这样使用:import mypkg.mymod 导入我们的模块了,mypkg为包名。
1、模块
自我包含,且有组织的代码片段就是模块
模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。实际的角度,模块往往对应Python程序文件。
每个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量名。模块可以由两个语句和一个重要的内置函数进行处理。
import: 使客户端(导入者)以一个整体获取一个模块。
from:容许客户端从一个模块文件中获取特定的变量名。
reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。
参考:http://ipseek.blog.51cto.com/1041109/795782
2、名称空间
一个名称空间就是从名称到对象的关系隐射集合。
每一个模块都定义的自己唯一的名称空间,如:
import s1,s2#s1.py,s2.py s1.foo() s2.bar() s1.bar() #由于每个模块都有唯一的名称空间,即使属性相同也不会发生冲突
向名称空间添加名称的操作过程涉及绑定标识符到指定对象的操作(以及给对象的引用计数加1)。
3、搜索路径和路径搜索
模块的导入需要叫做“路径搜索”的过程。
搜索路径:查找一组目录
路径搜索:查找某个文件的操作
ImportError: No module named myModule
这种错误就是说:模块不在搜索路径里,从而导致路径搜索失败!
导入模块时,不带模块的后缀名,比如.py
Python搜索模块的路径:
1)、程序的主目录
2)、PTYHONPATH目录(如果已经进行了设置)
3)、标准连接库目录(一般在/usr/local/lib/python2.X/)
4)、任何的.pth文件的内容(如果存在的话).新功能,允许用户把有效果的目录添加到模块搜索路径中去
.pth后缀的文本文件中一行一行的地列出目录。
这四个组建组合起来就变成了sys.path了,
>>> import sys >>> sys.path 导入时,Python会自动由左到右搜索这个列表中每个目录。
二、模块导入
1、import语句
推荐:
import放在程序前面,且按照Python标准库模块、Python第三方模块、自定义模块的顺序从上到下排开。
2、from-import语句
可以导入模块中指定属性:from module import name1[,nam2[,...nameN]]
注意:
(1)、导入可使用\进行换行,
如:from module import nam1,name2,\
name3,name4....
(2)、不推荐from module import *
(3)、使用as更换名称:
from module import name1 as name2
3、模块导入的特征
(1)、载入时执行模块,也就是导入模块的顶层代码将会被执行,通常包括该模块内全局变量、类和函数的声明。我们尽可能多的把代码封装到函数中,这是良好的模块编程习惯。
(2)、一个模块可被导入(import)多次,但是只加载(load)一次.
4、模块内建函数
(1)、__import__():导入模块的函数
import语句实际上调用__import__()函数
如果我们有一个testa.py文件,我们可以用module=__import__('testa')来导入它。这样可以用module.属性来使用testa.py中的属性
其他见书
三、包
1、包的概念
包是一个有层次的文件目录结构,由模块和子包组成。
2、解析包机制:
每一个.py文件称为一个module,module之间可以互相导入
module可以定义在包里面.Python定义包的方式稍微有点古怪,假设我们有一个parent文件夹,该文件夹有一个child子文件夹.child中有一个module a.py . 如何让Python知道这个文件层次结构?很简单,每个目录都放一个名为_init
_.py 的文件.该文件内容可以为空.这个层次结构同上:
参考:http://huangliangfeixu.blog.163.com/blog/static/18974706220112741040442/
3、python中__init__.py文件的作用
python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module。
那么,__init__.py还有什么别的功能呢?
其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。
点击继续阅读:
4、导入
参考上面的图片
import web.web_catch
import web.child_web.demo
from web.child_web import demo
转载来源:http://www.cnblogs.com/BeginMan/p/3183656.html
自己的总结:
1. Python程序运行时可以直接调用标准库模块中的函数,不用import它们,
可以使用help('modules')查看标准库模块;
2. 模块初次导入时,模块顶层程序代码(不在函数内的代码)会被执行,
def 定义的函数类,他们也称为语句,会被执行,但函数内的代码不会被执行,
直到它们被调用。
a.py:
print('hello i am module a')
def afunc():
print('i am a func')
b.py:
import a #导入a模块时,会执行a模块中顶层程序代码(不在函数内的代码)
print('i am module b')
a.afunc() #模块文件也是对象,故可以直接调用a模块中的函数,这就是为什么import re后,可以使用
re.compile
输出:
hello i am module a
i am module b
i am a func
#导入一个模块后,该模块对象就已经存在了,此时就可以调用该模块对象中的方法了。
3. import modulename和from module import name的区别
import modulename导入整个模块,包括生成一个以模块名命名的名称空间
from module import name只导入指定模块的部分属性至当前名称空间,使用时不必加模块前缀,
可以直接使用其名称,故,如果导入模块的名称与当前名称空间的名称重复了,会覆盖。
如:from random import randint,choice,此时,可以直接使用randint,而不需要random.randint这样
来使用。
a.py:
vara = 'hello i am from module a'
b.py:
vara = 'hello i am from module b'
from a import vara #重新被赋值
print(vara) #输出hello i am from module a
4. 导入两个模块a和b,两个模块中有相同名字的函数,如a.func和b.func,在调用它们时
并不会产生冲突,因为导入时,会生成一个以模块名命名的名称空间,并把该名称空间导入,
又如:list.pop()和dict.pop(),一个属于列表名称空间,一个属于字典名称空间;
上面list和dict都是类型,分别在两个模块中。
5. 模块就是一个名称空间,可以使用__dict__获取,如:
import random
random.__dict__
6. 导入模块例子:
/tmp/mypkg目录下有mymod.py和__init__.py文件,并且/tmp在Python的搜索路径下,此时可以
这样使用:import mypkg.mymod 导入我们的模块了,mypkg为包名。
相关文章推荐
- Python学习笔记(三):Time、函数、模块、文件I/O、异常处理(快速入门篇)
- Python3萌新入门笔记(23)
- python入门笔记--模块和模块包的调用
- python入门笔记(Day5)--filter,sorted,lambda,装饰,偏,模块
- [Python入门及进阶笔记]Python-基础-数字处理相关模块
- Python轻松入门-23 模块
- Python入门学习笔记之Python模块
- [Python入门及进阶笔记]Python-基础-数字处理相关模块
- python 入门笔记 (模块)
- Python入门笔记(二)
- MTK 个人入门笔记(各个模块资源占用)
- 【python笔记】扩展模块
- Python学习笔记 01 快速入门
- Python学习笔记总结(二):函数和模块
- Python学习笔记 OS模块
- 【23】淘宝sdk——入门实战之系统模块宝贝分类、宝贝排行榜、交流区
- python学习笔记——模块和命名空间
- python_模块与函数学习笔记
- Python笔记3:模块与函数
- Python扩展和嵌入: Cython三分钟入门(笔记)