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']

 

posted @ 2018-12-01 11:26  今生遇见前世  阅读(150)  评论(0编辑  收藏  举报