Python 模块
模块基本概念
模块是从逻辑上组织python代码的形式
当代码量变得相当大的时候,最好把代码分成一些有组织的代码段,前提是保证它们的彼此交互
这些代码片段相互间有一定的联系,可能是一个包含数据成员的方法类,也可能是一组相关但彼此独立的操作函数
创建模块
模块物理层面上组织模块的方法是文件,每一个以.py作为结尾的python文件都是一个模块
模块的名称切记不要与系统中已存在的模块重名
模块文件名字去掉后面的扩展名(.py)即为模块名
导入模块(import)
使用import导入模块
模块被导入后,程序会自动生成pyc的字节码文件以提升性能
模块属性通过”模块名,属性”的方法调用
如果仅需要模块中的某些属性,也可以单独导入
>>> import sys >>> import string >>> string.digits '0123456789' >>> from random import randint >>> randint(1,10) 2 >>> randint(1,10) 8 >>> randint(1,10) 5
#!/usr/bin/env python import time for i in range(10): print i, time.sleep(0.5) /usr/bin/python2.6 /root/PycharmProjects/untitled10/time.py 0 Traceback (most recent call last): File "/root/PycharmProjects/untitled10/time.py", line 3, in <module> import time File "/root/PycharmProjects/untitled10/time.py", line 7, in <module> time.sleep(0.5) AttributeError: 'module' object has no attribute 'sleep' Process finished with exit code 1
choice可以直接用 不用写random但是random不能使用
>>> string.upper('abcdef') 'ABCDEF' >>> from random import choice >>> choice('abcdef') 'f' >>> choice('abcdef') 'd' >>> random.choice('abcdef') Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'random' is not defined
起别名
>>> import random as rdm >>> rdm.choice('123123') '3' >>> rdm.choice('123123') '2'
模块加载(load)
一个模块只被加载一次,无论被导入多少次
只加载一次可以阻止多重导入时,代码被多次执行
如果两个文件相互导入,防止无限相互加载
模块加载时,顶层代码会自动执行,所以只将函数放入模块的顶层是良好的变成习惯
导入的时候模块的代码会被执行
#!/usr/bin/env python print __name__ /usr/bin/python2.6 /root/PycharmProjects/untitled10/foo.py __main__ Process finished with exit code 0 #!/usr/bin/env python import foo /usr/bin/python2.6 /root/PycharmProjects/untitled10/bar.py foo Process finished with exit code 0
独立执行和导入的差别
直接运行了就是main 被其它import的就是foo
#!/usr/bin/env python def pstar(num = 20): return '*' * num if __name__ =='__main__': print pstar() /usr/bin/python2.6 /root/PycharmProjects/untitled10/main1.py ******************** Process finished with exit code 0