Python 模块

来源:互联网 发布:go 知乎 编辑:程序博客网 时间:2024/05/16 01:38

Python 模块

首先申明下,本文为笔者学习《Python学习手册》的笔记,并加入笔者自己的理解和归纳总结。

1、模块的创建

通常以.py结尾的文件会被认为是python的模块。
模块的名称会在导入时被使用,因此必须满足变量的命名规则。
自定义模块mymod.py文件

import sysX = 11Y = [1, 2]def fun():                       # 方法fun,用来打印字符串print "Hello World"class klass:pass

2、import、from导入模块

(1) import导入一个模块。
>>> import mymod                 # import导入mymod模块>>> mymod.X                      # 模块的属性11>>> mymod.fun()                  # 模块的函数Hello World
(2) from从一个模块中导入一个特定的变量名。
>>> from mymod import X          # 导入mymod模块属性>>> X11>>> from mymod import fun        # 导入mymod模块函数>>> fun()Hello World
(3) import只会加载一次。
>>> import mymod>>> mymod.X = 13                 # 修改模块中X的值>>> mymod.X13>>> import mymod                 # 再次调用import>>> mymod.X                      # X的值未变化13

3、imp.reload重新导入模块

修改模块变量的值,重新导入后,修改的变量恢复到默认值。
>>> import mymod>>> mymod.X11>>> mymod.X = 13>>> from imp import reload>>> reload(mymod)<module 'mymod' from 'E:\mymod.pyc'>>>> mymod.X11
修改模块代码,需要重新导入。
修改mymod.py文件中fun方法,把打印字段改成"Welcome to Python"。

>>> import mymod                 # 再次导入mymod模块>>> mymod.fun()                  # 由于模块已导入,方法还是原来的Hello World>>> import imp>>> imp.reload(mymod)            # 调用imp.reload方法,重新导入mymod模块<module 'mymod' from 'E:\mymod.pyc'>>>> mymod.fun()                  # fun方法已修改Welcome to Python

4、导入模块搜索顺序

如果需要添加搜索目录,可以修改sys.path的值。
在D盘下存在extend.py文件

print "extend init"              # 打印一段字符串
该模块无法直接导入。
>>> import extendTraceback (most recent call last):  File "<pyshell#6>", line 1, in <module>    import extendImportError: No module named extend
在sys.path中添加目录
>>> import sys>>> sys.path                     # 在sys.path中定义了模块目录,从左往右搜索>>> sys.path.append("d:\\")>>> import extendextend init

5、模块属性访问

(1) 模块属性
在模块内的属性、方法和类等都可以看成模块的属性,通过逗号(.)访问。

>>> import mymod>>> mymod.sys                    # 模块导入模块<module 'sys' (built-in)>>>> mymod.X                      # 模块内属性11>>> mymod.fun                    # 模块内的方法<function fun at 0x0000000002CCDCF8>>>> mymod.klass                  # 模块内的类<class mymod.klass at 0x000000000291DCA8>
(2) 可以采用多种方式来访问模块属性。
>>> import mymod>>> mymod.X                      # 逗号访问11>>> mymod.__dict__["X"]          # __dict__包含模块所有的属性11>>> getattr(mymod, "X")          # getattr函数11>>> import sys>>> sys.modules["mymod"].X11
(3) import和from的赋值。
import和from都采用值传递的方法引用属性。

>>> import mymod                 # mymod是本地变量,指向mymod模块>>> mymod.X = 13                 # 修改模块中X的值>>> mymod.X13>>> from mymod import X          # X是本地变量,类似于X = mymod.X>>> X = 15                       # X的值被修改>>> mymod.X                      # 模块中X的值未变13>>> from mymod import Y          # Y是本地变量,指向mymod.Y>>> Y[0] = 15                    # Y是列表,自身被修改>>> mymod.Y[15, 2]

6、模块包

除了模块名,导入也可以指定目录路径,以点号(.)分开。
例如在当前目录下有一个dir1/dir2/mymod.py文件
(1) dir1和dir2目录下必须要有__init__.py文件。
dir1/__init__.py文件

print "dir1 init"X = 11
dir1/dir2/__init__.py文件
print "dir2 init"Y = 13
mymod.py文件
print "mymod init"
(2) 导入时以逗号分开。
>>> import dir1.dir2.mymod      # 导入dir1/dir2/mymod模块dir1 init                       # dir1/__init__.py文件dir2 init                       # dir1/dir2/__init__.py文件mymod init                      # dir1/dir2/mymod.py文件
(3) 可以导入目录,对应各自的__init__.py文件。
>>> from imp import reload>>> reload(dir1)                # 重新导入dir1dir1 init<module 'dir1' from 'E:\dir1\__init__.pyc'>>>> reload(dir1.dir2)           # 重新导入dir2dir2 init<module 'dir1.dir2' from 'E:\dir1\dir2\__init__.pyc'>>>> dir1.X, dir1.dir2.Y         # 访问__init__.py中的变量(11, 13)

7、__name__内置属性

如果该模块是被执行的话,__name__被设置为"__main__",否则就是模块的名称。
minemod.py文件

def fun():print "Hello World!"if __name__ == "__main__":fun()
外部调用
>>> import minemod>>> minemod.fun()Hello World!
在cmd命令下,直接运行该模块文件
% python mine.pyHello World!

8、as可以制定一个变量名替代导入变量。

>>> import dir1.dir2.mymod as mm           # 重命名导入进来的变量名>>> mm.X11

9、exec动态访问模块

使用一个变量定义一个模块,直接导入会发生异常。
>>> module = "dir1.dir2.mymod">>> import moduleTraceback (most recent call last):  File "<pyshell#1>", line 1, in <module>    import moduleImportError: No module named module>>> exec("import " + module)dir1 initdir2 initmymod init

0 0
原创粉丝点击