Python基础--模块
Posted jsnhdream
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础--模块相关的知识,希望对你有一定的参考价值。
模块
模块好比是一个工具包,要想使用这个工作包的工具(函数),就需要导入对应的模块,很多时候我们需要导入的模块其实是文件名。
导入模块的几种方式
- import
用关键字import导入指定的模块,类似于Java。格式:import 模块名,使用:模块名.函数名。
- form -import
from语句是导入模块指定部分到当前的命名空间中,这种导入方式很简单不应该过多使用,语法如下:
导入:from 模块名 import name1,name2... 使用:直接使用name1
from 模块名 import *为导入模块中的所有内容。
内建变量__name__
在团队开发时,不同人员负责不同的模块,因此我们必须要学会规范的模块制作。
#addNum.py def add(a,b): return a+b #用来测试 print(‘__name__=%s‘%__name__) if __name__ == ‘__main__‘: result = add(10,90) print("test.py 返回结果:%d"%result)
#test.py import addNum ret = addNum.add(1,9) print("调用addNum计算结果:%d"%ret)
在定制模块时,需要自己写测试部分,同时也想别人调用时不执行我们测试部分的代码,因此引入了一个__name__内建变量来判断当前是直接执行,还是被调用了。如果是直接执行__name__=__mian__;如果是被调用则__name__ =addNum,即被调用时为模块文件名字。
直接运行 __name__=__main__ test.py 返回结果:100 被调用 __name__=addNum 调用addNum计算结果:10
模块调用后,会生成Python的字节码文件.pyc,即下次运行程序时,被调用的模块不会再次重新生成字节码文件。
内建变量__all__
Python不像Java可以控制其访问范围的控制,因此Python使用内建变量__all__来暴露指定的接口给外部调用。模块中不使用__all__,则导入的模块内的所有属性、方法、类;如果模块中使用了__all__属性,则表示只导入指定的部分。
#all.py __all__ = [‘all‘] class all(object): x = 1 def test(self): print("all---test") def outTest(): print("----outTest----")
#test.py from all import * a = all() print(a.x) a.test() outTest()
输出: 1 all---test Traceback (most recent call last): File "test.py", line 5, in <module> outTest() NameError: name ‘outTest‘ is not defined
如果还是想调用all之外的属性或者方法,可以重新导入指定的部分:
test.py from all import * from all import outTest a = all() print(a.x) a.test() outTest()
输出:
1 all---test ----outTest----
包
将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹下创建一个__init__.py的文件,这个文件夹就是所谓的包。__init__.py控制着包的导入行为。使用包能够有效避免模块冲突问题,让应用组织结构更加清晰。
# recInfo.py def receive(): print("----receive----")
#sendInfo.py def send(): print("----send----")
#__init__.py __all__ = [‘sendInfo‘,‘recInfo‘]
以上是关于Python基础--模块的主要内容,如果未能解决你的问题,请参考以下文章