Python学习笔记-模块
2017-06-26 16:40
423 查看
模块:
顶层文件(也是模块文件)
模块文件
模块在物理形式上表现为.py结尾的代码文件
Python中,模块本身也是对象,所以模块也有变量,函数,类
在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性
查看标准库模块:
1help('modules') 顶层文件:包含了程序的主要控制流程模块文件:为顶层文件或其他模块提供各种功能组件
import module [,module1[,module2]]语句 导入模块 导入指定的整个模块,包括生成一个以模块名命名的名称空间 导入模块别名(有别名以后不能再使用原名,防止重复的名字空间): import module as module_alias
from-import语句(负面作用:会导致属性覆盖) 常用于只导入指定模块的部分属性至当前名称空间 from module import name1[,name2[,name3]]
import和from-import是赋值语句 import和from是可执行语句,类似于def,因此他们嵌套再if测试中,出现def中等等
import和from都是隐形的赋值语句 如果本程序中有声明变量a = 10 ,导入的模块中也有变量a = 20,那么模块中的变量覆盖原程序的变量,此时a = 20
import语句导入模块三个步骤: 1.找到模块文件:在指定的路径下搜索模块文件(依次查找,查到就停止) 搜索的路径:程序的主目录,PythonPath目录(如果设置了此变量),标准链接库目录,任何.pth文件的内容(如果存在.pth文件)123In [9]: import sysIn [11]: print (sys.path)['', '/usr/local/python361/bin', '/usr/local/python361/lib/python36.zip', '/usr/local/python361/lib/python3.6', '/usr/local/python361/lib/python3.6/lib-dynload', '/usr/local /python361/lib/python3.6/site-packages', '/usr/local/python361/lib/python3.6/site-packages/ipython-6.1.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/pexpect-4 .2.1-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/Pygments-2.2.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/prompt_toolkit-1.0.14-py3.6.egg' , '/usr/local/python361/lib/python3.6/site-packages/traitlets-4.3.2-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/simplegeneric-0.8.1-py3.6.egg', '/usr/local /python361/lib/python3.6/site-packages/pickleshare-0.7.4-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/decorator-4.0.11-py3.6.egg', '/usr/local/python361/lib /python3.6/site-packages/jedi-0.10.2-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/ptyprocess-0.5.1-py3.6.egg', '/usr/local/python361/lib/python3.6/site -packages/wcwidth-0.1.7-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/six-1.10.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/ipython_genutils -0.2.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/ipython-6.1.0-py3.6.egg/IPython/extensions', '/root/.ipython']
例,新建一个模块,让程序能够搜索到该模块文件
1234[root@kurol ~]# mkdir -pv /opt/python361/ mkdir: created directory `/opt/python361/'[root@kurol ~]# touch /opt/python361/mymod.py[root@kurol ~]# vim /opt/python361/mymod.py 1234567891011#! /usr/bin/python36#a = 10def printInfo(): print a + 30class Mym(): im = 'hello Mym' def __init__(self,x): self.name = x def printName(self): print self.im, self.name
直接导入会搜索不到
123456In [13]: import mymod---------------------------------------------------------------------------ModuleNotFoundError Traceback (most recent call last)<ipython-input-13-7215bcbec8da> in <module>()----> 1 import mymodModuleNotFoundError: No module named 'mymod'
添加sys.path路径12345In [14]: sys.path.append('/opt/python361')In [15]: import mymodIn [16]: In [17]: print (mymod.a)10
2.编译成字节码:文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件
3.执行模块的代码来创建其所定义的对象:执行里面的顶层文件
如果一个模块被导入,则__name__属性保存的是自己的模块名称
如果不是被导入,而是自己执行,则__name__属性保存的是__main__
1234567891011121314151617[root@kurol python361]# cat /opt/python361/mymod.py #! /usr/bin/python36#a = 10def printInfo(): print a + 30class Mym(): im = 'hello Mym' def __init__(self,x): self.name = x def printName(self): print self.im, self.nameif __name__ == '__main__': ##自我测试测试代码 printInfo() ins1 = Mym('jerry') print ins1.im print ins1.name 12In [27]: mymod.__name__Out[27]: 'mymod'
1234[root@kurol python361]# python mymod.py 40hello Mymjerry
注意:
第一次导入才会执行三个步骤,重复导入没有意义,只是在内存中提取已加载的模块。
reload()可用于重新加载模块
顶层文件(也是模块文件)
模块文件
模块在物理形式上表现为.py结尾的代码文件
Python中,模块本身也是对象,所以模块也有变量,函数,类
在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性
查看标准库模块:
1help('modules') 顶层文件:包含了程序的主要控制流程模块文件:为顶层文件或其他模块提供各种功能组件
import module [,module1[,module2]]语句 导入模块 导入指定的整个模块,包括生成一个以模块名命名的名称空间 导入模块别名(有别名以后不能再使用原名,防止重复的名字空间): import module as module_alias
from-import语句(负面作用:会导致属性覆盖) 常用于只导入指定模块的部分属性至当前名称空间 from module import name1[,name2[,name3]]
import和from-import是赋值语句 import和from是可执行语句,类似于def,因此他们嵌套再if测试中,出现def中等等
import和from都是隐形的赋值语句 如果本程序中有声明变量a = 10 ,导入的模块中也有变量a = 20,那么模块中的变量覆盖原程序的变量,此时a = 20
import语句导入模块三个步骤: 1.找到模块文件:在指定的路径下搜索模块文件(依次查找,查到就停止) 搜索的路径:程序的主目录,PythonPath目录(如果设置了此变量),标准链接库目录,任何.pth文件的内容(如果存在.pth文件)123In [9]: import sysIn [11]: print (sys.path)['', '/usr/local/python361/bin', '/usr/local/python361/lib/python36.zip', '/usr/local/python361/lib/python3.6', '/usr/local/python361/lib/python3.6/lib-dynload', '/usr/local /python361/lib/python3.6/site-packages', '/usr/local/python361/lib/python3.6/site-packages/ipython-6.1.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/pexpect-4 .2.1-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/Pygments-2.2.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/prompt_toolkit-1.0.14-py3.6.egg' , '/usr/local/python361/lib/python3.6/site-packages/traitlets-4.3.2-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/simplegeneric-0.8.1-py3.6.egg', '/usr/local /python361/lib/python3.6/site-packages/pickleshare-0.7.4-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/decorator-4.0.11-py3.6.egg', '/usr/local/python361/lib /python3.6/site-packages/jedi-0.10.2-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/ptyprocess-0.5.1-py3.6.egg', '/usr/local/python361/lib/python3.6/site -packages/wcwidth-0.1.7-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/six-1.10.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/ipython_genutils -0.2.0-py3.6.egg', '/usr/local/python361/lib/python3.6/site-packages/ipython-6.1.0-py3.6.egg/IPython/extensions', '/root/.ipython']
例,新建一个模块,让程序能够搜索到该模块文件
1234[root@kurol ~]# mkdir -pv /opt/python361/ mkdir: created directory `/opt/python361/'[root@kurol ~]# touch /opt/python361/mymod.py[root@kurol ~]# vim /opt/python361/mymod.py 1234567891011#! /usr/bin/python36#a = 10def printInfo(): print a + 30class Mym(): im = 'hello Mym' def __init__(self,x): self.name = x def printName(self): print self.im, self.name
直接导入会搜索不到
123456In [13]: import mymod---------------------------------------------------------------------------ModuleNotFoundError Traceback (most recent call last)<ipython-input-13-7215bcbec8da> in <module>()----> 1 import mymodModuleNotFoundError: No module named 'mymod'
添加sys.path路径12345In [14]: sys.path.append('/opt/python361')In [15]: import mymodIn [16]: In [17]: print (mymod.a)10
2.编译成字节码:文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件
3.执行模块的代码来创建其所定义的对象:执行里面的顶层文件
如果一个模块被导入,则__name__属性保存的是自己的模块名称
如果不是被导入,而是自己执行,则__name__属性保存的是__main__
1234567891011121314151617[root@kurol python361]# cat /opt/python361/mymod.py #! /usr/bin/python36#a = 10def printInfo(): print a + 30class Mym(): im = 'hello Mym' def __init__(self,x): self.name = x def printName(self): print self.im, self.nameif __name__ == '__main__': ##自我测试测试代码 printInfo() ins1 = Mym('jerry') print ins1.im print ins1.name 12In [27]: mymod.__name__Out[27]: 'mymod'
1234[root@kurol python361]# python mymod.py 40hello Mymjerry
注意:
第一次导入才会执行三个步骤,重复导入没有意义,只是在内存中提取已加载的模块。
reload()可用于重新加载模块
相关文章推荐
- python简明教程学习笔记3--模块
- Python2.7 学习笔记 (二)—— 函数,模块,正则
- Python 学习笔记 (4)—— 模块
- python 学习笔记10-----模块
- python学习笔记之九:模块和包
- Python学习笔记 OS模块
- Python学习笔记五(Python urllib模块)
- Python学习笔记--正则表达式,re模块
- Python学习笔记----模块
- Python学习笔记(十四):模块高级
- Python学习笔记总结(二):函数和模块
- Python学习笔记---模块;文件与文本处理
- python email模块学习笔记
- python学习笔记——3_模块
- python学习笔记(三):python构建与安装模块
- python学习笔记——模块和命名空间
- Python 学习笔记(常用模块)
- [转载]Python学习笔记三(常用模块)
- Python 学习笔记 (7)—— OS模块
- Python学习笔记之疑问 7:自定义模块放在什么位置