zoukankan      html  css  js  c++  java
  • 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']

  • 相关阅读:
    抱歉
    The area
    sort
    Problem D
    Problem B
    错排
    第8集 仪表开关电源照明原理图
    第7集 驱动与电气原理图绘制
    第6集 初步使用EPLAN部件库部件功能
    第5集 软件中建立项目结构
  • 原文地址:https://www.cnblogs.com/jsnhdream/p/10048787.html
Copyright © 2011-2022 走看看